次のようなファイルがあります。
SF:/home/developer/project/test/resources/somefile.js
DA:1,2
DA:3,2
end_of_record
SF:/home/developer/project/src/resources/otherfile.js
DA:9,2
DA:15,2
DA:22,2
end_of_record
...some more SF:/home/xxx and end_of_record lines...
このファイルは、で始まり、SF: ...
で終わるブロックで構成されていend_of_record
ます。()の間の行数はDA:x,x
異なる場合があることに注意してください。最初の行に文字列「test」が含まれるすべてのブロックを出力したいと思います(ここでは「SF:/ home /developer / test / resources / ...」のように)。この例では、必要な出力は次のようになります。
SF:/home/developer/project/test/resources/somefile.js
DA:1,2
DA:3,2
end_of_record
Linux環境でこれを実行したいと思います。
私の最初の試みは「sed」コマンドを使用してこれを行うことでしたが、いくつかの調査の結果、「awk」が複数行の操作を行うためのより適切なツールであるように見えました。
awkとRegexを使用して、これは私がこれまでに持っているコマンドです:
awk '/SF[:\/a-zA-Z0-9]*test[\/A-Za-z0-9.,:\n]*end_of_record/ {print}' FS="\n" RS="" examplefile
examplefile
ただし、最初の行に「test」が含まれているブロックだけでなく、完全なものが出力されます。awk
正規表現が間違っているのか、電話で何かが足りないのかわかりません。
最初の行に「test」が含まれるブロックのみを取得するにはどうすればよいですか?