Bash 在文件的某些行前加前缀

Bash 在文件的某些行前加前缀,bash,unix,sed,awk,terminal,Bash,Unix,Sed,Awk,Terminal,我想创建一个脚本,注释掉我的Mac OS X主机文件中包含.com的行。还有一个可以逆转它 因此: 127.0.0.1 foo.com 127.0.0.1 bar.com 127.0.0.1 baz 127.0.0.1 qux 将成为: #127.0.0.1 foo.com #127.0.0.1 bar.com 127.0.0.1 baz 127.0.0.1 qux 我在谷歌和sed手册页上四处查看,并尝试了一些bash和sed方面的东西,但我还没

我想创建一个脚本,注释掉我的Mac OS X主机文件中包含
.com
的行。还有一个可以逆转它

因此:

127.0.0.1    foo.com
127.0.0.1    bar.com
127.0.0.1    baz
127.0.0.1    qux
将成为:

#127.0.0.1   foo.com
#127.0.0.1   bar.com
127.0.0.1    baz
127.0.0.1    qux
我在谷歌和sed手册页上四处查看,并尝试了一些bash和sed方面的东西,但我还没有接近

sed's/^/#/'| grep.com'

grep.com'| sed's/^/^#/'

谢谢你的帮助

sed '/\.com/s/^/#/' < hosts
这将把
hosts
重命名为
hosts.bak
,并用更新的内容创建一个新的
hosts

要撤消它,请使用:

sed -i.bak '/^#.*\.com/s/^#//' hosts
带着awk

awk '$2 ~ /.com/{$0 = "#"$0;}{print}' temp.txt
输出

#127.0.0.1    foo.com
#127.0.0.1    bar.com
127.0.0.1    baz
127.0.0.1    qux

试一试这个@Fredrik,这有什么关系呢?啊,除了OP说的“还有一个可以逆转它”之外,什么都没有。因此链接above@Fredrik我想他的意思是“撤销”。这是另一种解释,当你说它听起来更合理:-)我认为OP希望它被保存到一个文件中,因为如果他想在stdout使用它,他可以在他的命令前面添加一个
cat
,它会work@noMAD他使用了输入重定向,这是同样的事情。但我更新了我的答案,以说明如何用sed替换。
#127.0.0.1    foo.com
#127.0.0.1    bar.com
127.0.0.1    baz
127.0.0.1    qux