我有一个文本文件:
192.168.47.100 computer
192.168.47.101 phone
192.168.47.1 computer3
192.168.47.50 computer2
Run Code Online (Sandbox Code Playgroud)
我想删除192.168.47.1行
我试过了
while read line
do
IPTemp="$line"
ex -s +"g/$IPTemp/d" -cwq $1
done < IPLib.txt
Run Code Online (Sandbox Code Playgroud)
但输出是:
192.168.47.50 computer 3
Run Code Online (Sandbox Code Playgroud)
我试过sed 's/192.168.47.1//g'但是再次输出是:
00 computer
01 phone
computer3
192.168.47.50 computer2
Run Code Online (Sandbox Code Playgroud)
我在谷歌搜索,但我找不到合适的.
问题是您的模式匹配数据中的3行.你需要结束它$.另外,如果使用sed'replace(s/),最后会出现空行.使用删除:
$ sed '/192\.168\.47\.1$/d' file
192.168.47.100
192.168.47.101
192.168.47.50
Run Code Online (Sandbox Code Playgroud)
在awk中:
$ awk '!/192\.168\.47\.1$/' file
192.168.47.100
192.168.47.101
192.168.47.50
Run Code Online (Sandbox Code Playgroud)
另一个在awk中,整个第一列与一个字符串进行比较,而不是使用正则表达式(感谢@Kent指出):
$ awk '$1!="192.168.47.1"' file
192.168.47.100
192.168.47.101
192.168.47.50
Run Code Online (Sandbox Code Playgroud)
和使用grep:
$ grep -v 192\.168\.47\.1$ file
192.168.47.100
192.168.47.101
192.168.47.50
Run Code Online (Sandbox Code Playgroud)
编辑:显然你改变了数据.现在你需要用空格结束模式:
$ sed '/192\.168\.47\.1 /d' file2
192.168.47.100 computer
192.168.47.101 phone
192.168.47.50 computer2
Run Code Online (Sandbox Code Playgroud)
并在awk中:
$ awk '!/192\.168\.47\.1 /' file2
192.168.47.100 computer
192.168.47.101 phone
192.168.47.50 computer2
Run Code Online (Sandbox Code Playgroud)
并且grep:
$ grep -v 192\.168\.47\.1\ file2
192.168.47.100 computer
192.168.47.101 phone
192.168.47.50 computer2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |