[英]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.