【发布时间】:2021-04-14 22:14:48
【问题描述】:
我花了一些时间在网上搜索,但没有找到答案。 假设我有一个包含以下行的文件:
aaaaaaa
vvvvv
ggggg
yyyyyyyyy
ffffff
rrrrrrrr
uuuuu
ssssssssssss
zzzzz
hhhhhhhh
我知道如何使用 awk 查找从包含“ffffff”的行到包含“uuuuu”的所有行:
awk '/ffffff/,/uuuuu/' file
但是我怎样才能得到我找到的第一行之前的行(即“yyyyyyyyy”)?有没有像 grep -B 1 这样的东西来做到这一点? 我想得到的是:
yyyyyyyyy
ffffff
rrrrrrrr
uuuuu
提前致谢。
【问题讨论】:
-
如果输入中不存在 uuuuu,您得到的一些答案将从 fffff 打印到文件末尾 - 这是正确的行为吗?如果只有 uuuuu 存在而没有前面的 ffffff,有些会打印 - 对吗?另外应该如何处理嵌套和/或重叠的分隔符?
-
这些都是好问题。我没有想到,假设我的文件是正确的,即总是有第一个字符串和第二个字符串......但你是对的,假设它总是正确的可能不是一个好主意......
-
在非晴天的情况下,打印您想要的文本总是微不足道的,而不打印您不想要的文本则要困难得多。一些答案的另一个问题是,如果
ffffff出现在输入的第一行,他们将在 ffffff->uuuuu 文本之前打印一个空行 - 这是期望的行为吗? -
我很确定 ffffff 永远不会出现在第一行。
标签: awk