【发布时间】:2019-02-23 22:01:34
【问题描述】:
我正在尝试使用 sed 或 grep 匹配嵌套文本,包括嵌套文本之前的行。
我正在使用的示例:
pattern3
abcde
fghij
pattern3
pattern1
abcde
fghij
pattern1
pattern1
klmno
pattern1
pattern3
abcde
pattern1
pqrst
patterh3
fghij
请注意,嵌套文本的前缀始终有四 (4) 个空格。此外,匹配模式后可能有也可能没有嵌套文本。
我对所有pattern1 行以及pattern1 后面以空格开头的行感兴趣。
我正在寻找的输出是:
pattern1
abcde
fghij
pattern1
pattern1
klmno
pattern1
pattern1
pqrst
我接近了:
sed -n '/^pattern1/,/^pattern1/p' data.txt
但它似乎在右侧 pattern1 匹配后跳过嵌套文本,并进入下一次迭代。
我也试过sed -n '/^\"pattern1\"$/,/^\"pattern1\"$/p' data.txt | sed '1d;$d',也没有运气。
【问题讨论】:
-
sed 用于执行
s/old/new,这不是您正在执行的操作,而 grep 用于执行g/re/p,这不是您正在执行的操作。所以对How to match nested text prefixed with spaces in sed or grep的直接回应是——你不需要,因为还有其他工具可以更好地完成这项工作。 -
@EdMorton 好点,当你以这种方式形成它时完全可以理解。谢谢!
-
发布的答案都没有解决您的问题吗?如果他们没有,那么请提供关于仍然缺少的内容的反馈,但如果他们有,请查看stackoverflow.com/help/someone-answers 了解下一步该怎么做。