Unix 如果下一行以特定单词开头,则应打印前一行

Unix 如果下一行以特定单词开头,则应打印前一行,unix,Unix,如何打印与特定图案及其前一行匹配的行 我确实有这样的垃圾场: Apple:Orange=9942501133; Fault Code 9 Apple:Orange=9942501144; Fault Code 9 Apple:Orange=9942501155; Apple:Orange=9942501166; Apple:Orange=9942501177; Fault Code 9 Apple:Orange=9942501188; Apple:Orange=9942501199; Apple

如何打印与特定图案及其前一行匹配的行

我确实有这样的垃圾场:

Apple:Orange=9942501133;
Fault Code 9
Apple:Orange=9942501144;
Fault Code 9
Apple:Orange=9942501155;
Apple:Orange=9942501166;
Apple:Orange=9942501177;
Fault Code 9
Apple:Orange=9942501188;
Apple:Orange=9942501199;
Apple:Orange=9942501200;
Apple:Orange=9942501211;
Fault Code 9
Apple:Orange=9942501222;
输出结果为“故障代码9”的上一行,包括故障代码9:

Apple:Orange=9942501133;
Fault Code 9
Apple:Orange=9942501144;
Fault Code 9
Apple:Orange=9942501177;
Fault Code 9
Apple:Orange=9942501211;
Fault Code 9

这应该可以完成任务

cat yourfile | perl -e 'while(<STDIN>) { if(/Fault Code 9/) { print $prev; } $prev=$_; }'

这应该可以完成任务

cat yourfile | perl -e 'while(<STDIN>) { if(/Fault Code 9/) { print $prev; } $prev=$_; }'
tr-d'\n'
tr-d'\n'
-B
开关表示“之前”

-B
开关的意思是“之前”。

gawk:

/^Fault Code 9/ {
  print s
  print $0
}

{
  s = $0
}
目瞪口呆:



@Ether:tr无法从文件中获取输入,cat是必需的shell中永远不需要有一个参数的cat,因为您可以使用漏斗:
tr…
@Ether:tr无法从文件中获取输入,cat是必需的shell中永远不需要有一个参数的cat,因为您可以使用漏斗:
tr…
输出不符合要求。Ther-Ji的要求是-B1。上述命令不起作用。它会引发如下错误:grep:can't open-B1 grep:can't open Fault Code 9-B选项指定它将在搜索参数之前打印多少行。请在命令行中键入
man grep
。旧问题已合并到此问题中。我现在重新打开这一个。输出不符合要求。Ther Ji,什么是-B1。上述命令不起作用。它会引发如下错误:grep:can't open-B1 grep:can't open Fault Code 9-B选项指定它将在搜索参数之前打印多少行。请在命令行中键入
man grep
。旧问题已合并到此问题中。我现在要重新打开这个,拉索。。。它的作品…你能指导我修改为苹果输出:橙色=9942501133;故障代码9苹果:橙色=9942501144;故障代码9苹果:橙色=9942501177;故障代码9苹果:橙色=9942501211;故障代码9 ie,数字后面跟故障代码。@用户:阅读手册页中所使用的命令,然后自己修改!我们没有得到报酬来做你的工作;你是,拉索。。。它的作品…你能指导我修改为苹果输出:橙色=9942501133;故障代码9苹果:橙色=9942501144;故障代码9苹果:橙色=9942501177;故障代码9苹果:橙色=9942501211;故障代码9 ie,数字后面跟故障代码。@用户:阅读手册页中所使用的命令,然后自己修改!我们没有得到报酬来做你的工作;你是。假设GNU
grep
;POSIX
grep
不支持此选项。您好,Leffler,非常感谢您的回复,但它不起作用。非法选项--B是来自sun server的回复。plz帮助。你能试试下面的命令cat yourfile | perl-e'while(){if(/Fault Code 9/){print$prev;}$prev=$|;}并回答GNUgrep;POSIX
grep
不支持此选项。您好,Leffler,非常感谢您的回复,但它不起作用。非法选项--B是来自sun server的回复。plz帮助。你可以试试下面的cmd cat yourfile | perl-e'while(){if(/Fault Code 9/){print$prev;}$prev=$\u;}并回复吗这说明了基本算法-如果你需要在匹配之前打印N行,那么你必须存储这N行。如果N>1,则还必须确保在N行空间内两次匹配时不会打印太多数据。这说明了基本算法-如果需要在匹配之前打印N行,则必须存储N行。如果N>1,那么您还必须担心在N行空间内两次匹配时是否打印过多数据;请检查一下电话号码。无需立即以复制方式关闭。如果您想知道它是否已合并,请检查编辑历史记录(单击最后一个编辑该问题的人上方的链接(“已编辑的X年前”);请检查。无需立即以复制方式关闭。如果您想知道它是否已合并,请检查编辑历史记录(单击链接(“已编辑的X年前”)上面是最后一个编辑问题的人,在上面^^^^^^^^^^^
grep -B1 'Fault Code 9' filename.txt 
# grep -B1 ^Fault log.txt
/^Fault Code 9/ {
  print s
  print $0
}

{
  s = $0
}