首页 > 解决方案 > 在图案后提取线条

问题描述

我在一个文件夹中有 50 个文件,并且都有一个共同的模式“^^”。我想打印“^^”之后的所有内容并附加文件名并将所有提取的行打印到一个输出文件中。虽然我的代码适用于单个文件,但它不适用于所有文件。

awk '/\^^/{getline; getline; print FILENAME; print}' *.txt > output

例子

1.txt

     ghghh hghg 
       ghfg hghg hjg
            jhhkjh 
    kjhkjh kjh

^^ 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

2.txt

hghjhg hgj 
 jhgj

            jhgjh kjgh

        jhg

^^ 
bbbbbbbbbbbbbbbbbbbbbbb

所需的输出.txt

1.txt
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
2.txt
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

我的实际输出

1.txt
ghghh hghg
1.txt
zzzzzzzzzzzzzzzzzzzzzzzzzzzzz

标签: awksed

解决方案


要打印 之后的行^^,请尝试:

$ awk 'f{print FILENAME ORS $0; f=0} /\^\^/{f=1}' *.txt
1.txt
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
2.txt
bbbbbbbbbbbbbbbbbbbbbbb

这个怎么运作:

  • f{print FILENAME ORS $0; f=0}

    如果变量f为真(非零),则打印文件名、输出记录分隔符和当前行。然后设置f回零。

  • /\^\^/{f=1}

    如果当前行包含^^,则设置f为 1。


推荐阅读