Bash-Mind关键字在文件中并删除其字符串

我想给一个关键字,找到一个字符串,它是一个关键字 apepears 在文件中,并删除整个字符串。

这就是我得到的,但它不应该工作:


KEYWORD='domain.com'
cat /etc/hosts | grep -v "$KEYWORD" > /etc/hosts


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


这就是在团队之后结束的方式
sed -i_bak -e '/domain\.com/d' /etc/hosts

:


127.0.0.1 localhost localhost.localdomain


我试过了
sed -i_bak -e '/\<namourphoto\.com\.br\>/d' ~/Desktop/hosts

, 但它没有工作。

CONCLUSION

我想出的这个代码 /根据帮助我有美丽的人/:


D=domain.com
DOMAIN=`echo "$D" | sed 's/\./\\\\./g'`
sed -i_bak -e "/[\t]$DOMAIN/d" /etc/hosts


注意:

我希望域始终有一个需要删除的标签。

我自动避免域名的点。
</namourphoto\.com\.br\>
已邀请:

三叔

赞同来自:

使用
http://en.wikipedia.org/wiki/Sed
, sed:


sed -i ".bak" '/culpa/d' test.txt


到以上将删除包含的行

责备

在 test.txt. 它将创建原始备份副本。 /名称 test.txt.bak/ 并更改源文件到位。

快网

赞同来自:

将其发送到另一个文件,而不是您读取的文件,并小心使用无用。
cat

.


grep -v "$KEYWORD" /etc/hosts > newfile


除了关于赋予的优秀答案 sed, 你也可以使用 Perl 略微改善 regex 要解决这个问题:


perl -pi.old -e 's/.*\sdomain\.com\s*\n//' file


注意我考虑
domain.com

将被空格隔离 /标签或空间等。/, 并且在它之后,除了划痕或更多空间之外,新行将出现。 相似地
-i

在 sed,

-i.old

在 perl 设置变量
$^I

, 并且您的源文件将被更改,而副本将存储在旧名称下并添加
.old

.

窦买办

赞同来自:

如果要仅删除文件的最后一串文件


sed -i '/[[:space:]]\+domain\.com/d' test.txt

要回复问题请先登录注册