繁体   English   中英

如何删除文本文件中的特定文本

[英]How can I delete a specific text in a text file

我有一个文本文件:

192.168.47.100 computer
192.168.47.101 phone
192.168.47.1 computer3
192.168.47.50 computer2

我想删除192.168.47.1

我试过了

while read line
do
    IPTemp="$line"
    ex -s +"g/$IPTemp/d" -cwq $1
done < IPLib.txt

但输出是:

192.168.47.50 computer 3

我试过sed 's/192.168.47.1//g'但是输出再次是:

00 computer
01 phone
computer3
192.168.47.50 computer2

我在谷歌搜索,但我找不到合适的。

问题是您的模式匹配数据中的3行。 你需要以$结束它。 此外,如果你使用sed的替换( s/ ),你最终会得到空行。 使用删除:

$ sed '/192\.168\.47\.1$/d' file
192.168.47.100
192.168.47.101
192.168.47.50

在awk中:

$ awk '!/192\.168\.47\.1$/' file
192.168.47.100
192.168.47.101
192.168.47.50

另一个在awk中将整个第一列与字符串进行比较,而不是使用正则表达式(感谢@Kent指出):

$ awk '$1!="192.168.47.1"' file
192.168.47.100
192.168.47.101
192.168.47.50

并使用grep

$ grep -v 192\.168\.47\.1$ file
192.168.47.100
192.168.47.101
192.168.47.50

编辑:显然你改变了数据。 现在你需要用空格结束模式:

$ sed '/192\.168\.47\.1 /d' file2
192.168.47.100 computer
192.168.47.101 phone
192.168.47.50 computer2

并在awk中:

$ awk '!/192\.168\.47\.1 /' file2
192.168.47.100 computer
192.168.47.101 phone
192.168.47.50 computer2

grep

$ grep -v 192\.168\.47\.1\  file2
192.168.47.100 computer
192.168.47.101 phone
192.168.47.50 computer2

你可以用sed做到这一点。 你只需要强制与<>强制匹配所以:

sed 's/\<192\.168\.47\.1\>/d'

应该管用。

要删除该行并将输出打印到标准输出:

sed '/192.168.47.1/d' ./infile

要直接修改文件(并创建备份):

sed -i.bak '/192.168.47.1/d' ./infile

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM