如何在bash中找到行后跟已知字符串的行

时间:2018-06-21 05:44:17

标签: regex bash sed

如何查找文本,如果您仅知道字符串后跟的字符串? 示例:

...
some unimportant text
Line I want
text text String_I_know
some more text

我的方法非常简单,我使用sed尝试在已知字符串处剪切文本,然后仅列出最后两行,然后仅列出第一行:

echo $MyString | sed 's/String_I_know*//' | tail -2 | head -1

但是sed似乎不适用于包含\ n字符的文本。 有什么办法吗?

编辑:已经回答,但是添加了一些额外的信息,以避免与其他grep相关问题混淆。在这里,我不需要在每次出现字符串之前都列出一行,因为我知道它只有一次(或者我不在乎其他出现),因此,使用

echo "$MyString" | grep -B1 String_I_know | head -1
首选

,因为它也可以在非POSIX系统上工作

2 个答案:

答案 0 :(得分:0)

遵循awk可能会对您有所帮助。

让我们说以下是我的变量。

echo "$var"
some unimportant text
Line I want
text text String_I_know
some more text

然后是代码。

echo "$var" | awk '/String_I_know/{print prev} {prev=$0}'
Line I want

答案 1 :(得分:0)

grep使您可以打印上下文以及匹配的行。然后,您只需要忽略匹配的行即可。

echo "$MyString" | grep -B1 String_I_know | head -1