Bash - find a keyword in a file and delete its line [duplicate]

孤人 提交于 2019-11-30 18:34:34

Use the stream editor, sed:

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

The above will delete lines containing culpa in test.txt. It will create a backup of the original (named test.txt.bak) and will modify the original file in-place.

Pipe it to another file, not the same one that you're reading from, and be careful with the useless use of cat.

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

Apart from the fine answer given regarding sed, you can also use Perl and a little improved regex to solve this:

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

Notice I'm considering domain.com will be isolated by space characters (tabs or spaces, and so on), and that nothing but zero or more spaces will appear after it until the newline. Similarly to -i in sed,
-i.old in perl sets the $^I variable, and your original file will receive the changes while a copy will be kept under the old name and a .old appended.

If you want to only delete last line of your example file

sed -i '/[[:space:]]\+domain\.com/d' test.txt
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!