如何查找文本,如果您仅知道字符串后跟的字符串? 示例:
...
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系统上工作
答案 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