Bash - find a keyword in a file and delete its line
本问题已经有最佳答案,请猛点这里访问。
我想给一个关键字,找到这个关键字的行?在文件中查找并删除整行。
这是我得到的,但它不能正常工作:
1 2 | KEYWORD='domain.com' cat /etc/hosts | grep -v"$KEYWORD"> /etc/hosts |
UPDATE
这对我有用:
但是,由于我有两行"domain.com",有没有办法告诉sed只擦除确切关键字"domain.com"出现的行
这是/ etc / hosts的原始内容:
1 2 3 | 127.0.0.1 localhost localhost.localdomain 222.111.22.222 hvn.domain.com 222.111.22.222 domain.com |
以下是命令
1 | 127.0.0.1 localhost localhost.localdomain |
我试过
结论
这是我提出的代码(基于优秀人员给我的帮助):
1 2 3 | D=domain.com DOMAIN=`echo"$D" | sed 's/\./\\\\./g'` sed -i_bak -e"/[\t]$DOMAIN/d" /etc/hosts |
注意:
-
我指望在删除域名之前总是有一个标签
-
我正在自动逃避域名的点。
使用流编辑器,sed:
1 | sed -i".bak" '/culpa/d' test.txt |
以上将删除test.txt中包含culpa的行。 它将创建原始备份(名为test.txt.bak)并将就地修改原始文件。
将它传输到另一个文件,而不是您正在读取的文件,并小心使用
1 | grep -v"$KEYWORD" /etc/hosts > newfile |
除了关于sed的精细答案,你还可以使用Perl和一些改进的正则表达式来解决这个问题:
1 2 | perl -pi.old -e 's/.*\sdomain\.com\s* //' file |
注意我正在考虑
perl中的
如果您只想删除示例文件的最后一行
1 | sed -i '/[[:space:]]\+domain\.com/d' test.txt |