我有一个文件打印出多次出现的“200 OK”。我只对模式“COMMAND”之后最后出现的“200 OK”感兴趣。在我的特定文件中,“COMMAND”打印了 100 次。它看起来像这样:
otherdata
200 OK
otherdata
200 OK
COMMAND
200 OK
所以我使用命令。
grep -A1 COMMAND file | grep -v '200 OK'
这给了我以下输出:
COMMAND xxxxx PASSWORD xxxxxx
--
COMMAND xxxxx PASSWORD xxxxxx
513 unknown user account
--
COMMAND xxxxxx PASSWORD xxxxxx
--
COMMAND xxxxxx PASSWORD xxxxxx
513 unknown user account
--
COMMAND xxxxxx PASSWORD xxxxxxx
--
我得到了除 200 OK 以外的所有内容,但我不需要包含以下内容的行
COMMAND xxxxx PASSWORD xxxxx
---
如何仅获取 200 OK 及其上方行以外的行的输出?理想情况下,我希望我的输出仅包含这样的行,而不包含其他内容。 513 只是一个例子,可能还有其他。
COMMAND xxxxx PASSWORD xxxxxx
513 user account unknown
答案1
你可以这样做sed
:
sed -n -e '/COMMAND/{N;/200/! p;}' file
默认情况下,这用于-n
不打印行,然后如果一行匹配COMMAND
,则将该行与下一行连接起来(N
如果不匹配,则200
打印组合行。