在特定行的末尾附加文本

在特定行的末尾附加文本

我有一个包含多行的文件。我想完成的任务是在命令末尾添加一个字符串。

我有一个自动安装工具的脚本。现在源代码中有些东西发生了变化。我需要contrib non-free在这行末尾添加:

deb http://ftp.us.debian.org/debian/ wheezy main

应该看看这个:

deb http://ftp.us.debian.org/debian/ wheezy main contrib non-free

我怎样才能做到这一点?

答案1

由于您使用的是 Linux,因此您将拥有 GNU 版本的 sed(它具有-i“就地”编辑文件的选项):

sed -i '/deb http:\/\/ftp.us.debian.org\/debian\/wheezy main/s/$/ contrib non-free/' file.sh

在 sed 命令中,前两个之间的内容//告诉 sed 搜索包含该内容的行 -- 因此sed '/foo/'将搜索包含“foo”的行。由于您的行包含正斜杠,因此需要对其进行转义。告诉s/$/ contrib non-freesed 将行尾(用美元符号表示)替换为“contrib non-free”。一般形式为s/replace this/with this/。总之,这会搜索您想要的行,然后将您的文本附加到末尾。

如果你只是想改变每一个文件中的行:

sed -i 's/$/ contrib non-free/'

使用标准文本编辑器 ed 非常轻微地更具可移植性,但一般来说,您会发现自己更频繁地使用 sed 来完成这些任务(或者最好是一个像 vim 这样的不错的文本编辑器)。

printf '%s\n' 'g/deb http:\/\/ftp.us.debian.org\/debian\/wheezy main/s/$/ contrib non-free/' w q | ed file.sh

相关内容