Rog*_*ger 10 bash grep replace sed command-line-interface
我想给一个关键字,找到这个关键字在文件中的行,并删除整行.
这是我得到的,但它不能正常工作:
KEYWORD='domain.com'
cat /etc/hosts | grep -v "$KEYWORD" > /etc/hosts
Run Code Online (Sandbox Code Playgroud)
UPDATE
这对我有用:
sed -i_bak -e '/domain\.com/d' /etc/hosts
但是,由于我有两行"domain.com",有没有办法告诉sed只擦除确切关键字"domain.com"出现的行
这是/ etc/hosts的原始内容:
127.0.0.1 localhost localhost.localdomain
222.111.22.222 hvn.domain.com
222.111.22.222 domain.com
Run Code Online (Sandbox Code Playgroud)
以下是命令后的结果sed -i_bak -e '/domain\.com/d' /etc/hosts:
127.0.0.1 localhost localhost.localdomain
Run Code Online (Sandbox Code Playgroud)
我试过sed -i_bak -e '/\<namourphoto\.com\.br\>/d' ~/Desktop/hosts但它没用.
结论
这是我提出的代码(基于优秀人员给我的帮助):
D=domain.com
DOMAIN=`echo "$D" | sed 's/\./\\\\./g'`
sed -i_bak -e "/[\t]$DOMAIN/d" /etc/hosts
Run Code Online (Sandbox Code Playgroud)
注意:
我指望在删除域名之前总是有一个标签
我正在自动逃避域名的点.
mik*_*iku 17
使用流编辑器,sed:
sed -i ".bak" '/culpa/d' test.txt
Run Code Online (Sandbox Code Playgroud)
以上将删除test.txt中包含culpa的行.它将创建原始备份(名为test.txt.bak)并将就地修改原始文件.
将它传输到另一个文件,而不是你正在阅读的文件,并小心使用无用的文件cat.
grep -v "$KEYWORD" /etc/hosts > newfile
Run Code Online (Sandbox Code Playgroud)
除了关于sed的精细答案,你还可以使用Perl和一些改进的正则表达式来解决这个问题:
perl -pi.old -e 's/.*\sdomain\.com\s*\n//' file
Run Code Online (Sandbox Code Playgroud)
注意我正在考虑domain.com将被空格字符(制表符或空格等)隔离,并且除了新行之外,在它之后只会出现零或更多空格.与-ised 类似,
-i.old在perl中设置$^I变量,原始文件将接收更改,而副本将保留在旧名称下并.old附加.