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

ers*_*rim 2 linux bash awk

我有一个文本文件:

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)

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

Jam*_*own 7

问题是您的模式匹配数据中的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)

  • `.`是元字符...建议只保留'awk'$ 1!="192.168.47.1"'和`grep -vF'192.168.47.1'并删除其余的或者逃避每个`.` (2认同)