当前位置: 首页 > 知识库问答 >
问题:

获取pattern1之间的行或匹配pattern2-sed/awk的行

爱花蜂
2023-03-14
PATTERN2
PATTERN1
text I want
more text I want ...
PATTERN1
text don't want
text don't want
text don't want
PATTERN2
PATTERN1
text I want
more text I want ...
PATTERN1
text don't want
text don't want
text don't want
...
sed -n -e '/PATTERN1/,/PATTERN1/ p' my_file.txt
sed -n -e '/PATTERN2/ p' my_file.txt

然而,我很难得到符合这两种模式中任何一种的线条。我想要的输出是

PATTERN2
PATTERN1
text I want
more text I want ...
PATTERN1
PATTERN2
PATTERN1
text I want
more text I want ...
PATTERN1

谢谢你的帮助。

共有1个答案

华甫
2023-03-14

您只需将两个-e命令附加在一起即可。它将对每一行都执行它们

sed -n -e '/PATTERN1/,/PATTERN1/ p' -e '/PATTERN2/ p' my_file.txt

注意:如果/pattern2//pattern1/中匹配,则该行将打印两次

还有一个更复杂的sed命令可以解决上述警告:

sed -e '/PATTERN1/,/PATTERN1/ !{
    /PATTERN2/ !d
}'
 类似资料:
  • 问题内容: 我正在用于在运行时更新json配置文件。有时,当模式在json文件中不匹配时,仍然会以返回码0退出。 返回0表示成功完成,但是如果找不到正确的模式并更新文件,为什么返回0?有没有解决方法? 谢谢! 问题答案: 如@cnicutar所评论,命令的返回码表示命令是否成功执行。与您在代码/脚本中实现的逻辑无关。 因此,如果您有: sed将返回,但是如果您编写一些语法/表达式错误,或者输入/文

  • 问题内容: 我有一些复杂的日志文件,需要编写一些工具来处理它们。我一直在玩awk,但不确定awk是否适合此工具。 我的日志文件是OSPF协议解码的打印输出,其中包含各种协议pkts及其内容的文本日志,以及用值标识的各种协议字段。我想处理这些文件并仅打印出与特定pkts有关的日志的某些行。每个pkt日志可以包含该pkt条目的不同行数。 awk似乎能够处理与模式匹配的一行。我可以找到所需的pkt,但是

  • 问题内容: 我有一个看起来像这样的文件: 该文件包含以开头和结尾的块。请注意,()之间的行数可以不同。我想在第一行中打印所有带有字符串“ test”的块(例如此处的“ SF:/ home / developer / test / resources / …”)。对于此示例,我想要的输出将是: 我想在 Linux 环境中执行此操作。 我的第一个尝试是使用“ sed”命令执行此操作,但是经过一些研究,

  • 我有一个多行匹配的pcregrep命令,我想把它转换成awk或sed命令,因为我需要它在一台没有pcregrep的机器上(OS X)。 原始命令: 它输出包含字符串“baseTX”的接口名称(这是我发现的唯一可靠地找出MacBook上以太网接口名称的方法)。对我来说是“en4”。 输入文本如下所示: 我怎么能用awk或se抓取“en4”?我试了一个小时,但我只是不擅长se和awk。

  • 问题内容: 我有一个像这样的字符串: 基本上翻译为a ,我想将其替换为: 转换为。 用很多方法进行了尝试,但是它不起作用可能是因为以不同的方式使用了新行。我尝试了: …以及许多其他方式都没有结果。任何想法在这种情况下如何更换? 问题答案: 使用gawk尝试以下行: 如果要 处理新行,则必须先阅读整个文件:

  • 我有两个具有多列的数据帧。 我想比较df1['id']和df2['id'],并返回一个新的df,其中列['correct_id']具有匹配值。例子: df1: df2 这是我的代码: 我得到的结果是: 预期输出: 我该怎么解决这个问题拜托