Bash 在文件的某些行前加前缀
我想创建一个脚本,注释掉我的Mac OS X主机文件中包含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方面的东西,但我还没
.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