如何使用 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
我正在使用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