通过使用,sed
您可以q
一次完成范围和uit输入:
sed '/^182$/p;//,/^ABC$/!d;/^ABC$/!d;q'
同样,使用GNU,grep
您可以在两个grep
s 之间分割输入:
{ grep -nxF -m1 182; grep -nxF -m1 ABC; } <<\IN
123
XXY
214
ABC
182
558
ABC
856
ABC
IN
...打印...
5:182
2:ABC
...表示第一个grep
发现一个-F
固定字符串文字,-x
整行182从其读取开始匹配了5行,第二个发现了类似类型的ABC从其读取开始匹配了2行-或2行在第5行的第一次grep
退出阅读之后
来自man grep
:
-m NUM, --max-count=NUM
Stop reading a file after NUM matching
lines. If the input is standard input from
a regular file, and NUM matching lines are
output, grep ensures that the standard input
is positioned to just after the last
matching line before exiting, regardless of
the presence of trailing context lines.
This enables a calling process to resume a
search.
为了进行可重复的演示,我使用了here-document,但是您可能应该这样做:
{ grep ...; grep ...; } </path/to/log.file
它还可以与其他shell复合命令构造一起使用,例如:
for p in 182 ABC; do grep -nxFm1 "$p"; done </path/to/log.file
grep
使用了要求?我不认为这可以做到,grep
但是使用awk
或sed
(单独使用或与结合使用grep
)会很容易。