如何使用 Shell 删除包含特定字符串的行?

How to remove the lines contain certain string using Shell?

我正在使用Ubuntu来运行一个自动化测试,它需要处理一个文本日志文件,例如下面

INVITE INVITE sip:88787@10.1.1.100:5060 SIP/2.0
INVITE SIP/2.0 100 Trying
1154845 NOTIFY  NOTIFY sip:1@10.1.1.19:5065 SIP/2.0
1154845 NOTIFY  NOTIFY SIP/2.0 200 OK
INVITE SIP/2.0 180 Ringing

我只想删除带有 "NOTIFY" 的 2 行并在下面获取日志文件,我是 Shell 的新手并尝试了一些 google 但没有弄清楚方式,你能分享一下怎么做吗?谢谢!

INVITE INVITE sip:88787@10.1.1.100:5060 SIP/2.0
INVITE SIP/2.0 100 Trying
INVITE SIP/2.0 180 Ringing

尝试以下操作:

grep -v "NOTIFY" filename.txt

Grep 通常用于打印与特定模式匹配的行,但“-v”选项允许反转匹配;删除与模式匹配的行。

可以找到更多信息 here

awk方式:

awk '!/NOTIFY/ {print [=10=]}' filename

说明

awk 打算打印 [=14=] 表示的行,如果该行包含 /NOTIFY/ 指示的 NOTIFY。因为我们不想包含包含 NOTIFY 的行,所以我们在匹配之前放置一个 !,如下所示:!/NOTIFY/

--

sed 尝试:

sed -n '/NOTIFY/!p' filename