我有一个包含多行的文件。我想完成的任务是在命令末尾添加一个字符串。
我有一个自动安装工具的脚本。现在源代码中有些东西发生了变化。我需要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-free
sed 将行尾(用美元符号表示)替换为“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