gpt4 book ai didi

linux - 使用 bash 向不断增长的段落添加新行

转载 作者:太空宇宙 更新时间:2023-11-04 10:31:03 24 4
gpt4 key购买 nike

我正在尝试编写一个 bash 脚本,将新行添加到一个不断增长的文件段落中。每次我运行脚本时,它都应该在该段落中添加一个新行,但它会返回文件的全部内容。

这是我的代码...

function registerServiceProvider {
# register service provider inside config/app.php
sed '/App\Providers\*::class,/a \ App\Providers\${repoName}${provider}::class,' ./config/app.php
}
registerServiceProvider

最佳答案

默认情况下,sed 将结果流打印到 stdout。如果您有 GNU sed,您可以使用 -i 就地修改文件。对于许多 BSD sed,您可以使用 -i,但它需要一个参数,该参数将是添加到创建的备份文件的扩展名。

如果你想保持更多的 POSIXy,你可以将输出重定向到一个新文件,然后将该临时文件移动到旧名称上(或重定向输出以确保你不更改权限)。不过,不要尝试通过重定向一步完成,因为 shell 要做的第一件事是截断文件,然后您将尝试读取它,但它会是空的。

因此,使用 GNU sed,您可以:

sed -i -e '/App\Providers\*::class,/a \ App\Providers\${repoName}${provider}::class,' ./config/app.php

或者对于 BSD(或 GNU,该参数有效但对于 GNU 是可选的)

sed -i .bak -e '/App\Providers\*::class,/a \ App\Providers\${repoName}${provider}::class,' ./config/app.php

或便携

sed '/App\Providers\*::class,/a \ App\Providers\${repoName}${provider}::class,' ./config/app.php > tmp_paragraph
cat tmp_paragraph > ./config/app.php
rm tmp_paragraph

如果您希望 repoNameprovider 变量成为扩展的 shell 变量,您需要将 sed 脚本放在双引号中。 bash 不会在单引号字符串中扩展变量。因此,以 GNU sed 示例为例,您可以将其更改为使用双引号,如下所示:

sed -i -e "/App\\\\Providers\\\\*::class,/a \\ App\\\\Providers\\\\${repoName}${provider}::class," ./config/app.php

请注意,我们必须对斜杠进行大量额外的转义,因为 bash 会将它们视为双引号内的转义字符。我们可以使用单引号来帮助解决这个问题,只要我们将变量放在它外面(请注意,我仍然会加倍引号,因为我认为你打算这样做是为了在那些地方获得实际的反斜杠)

sed -i -e '/App\\Providers\\*::class,/a \ App\\Providers\\'${repoName}${provider}'::class,' ./config/app.php

关于linux - 使用 bash 向不断增长的段落添加新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39916539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com