特定の行を読み、「abc」で始まり、「def」で終わる文字列部分を抽出するにはどうすればよいですか?

特定の行を読み、「abc」で始まり、「def」で終わる文字列部分を抽出するにはどうすればよいですか?

「abc」と「def」で始まる文字列の一部を印刷しようとしています。例:

123456789
123abc_fff_def456789
123456789
...

結果:

abc_fff_def

ベストアンサー1

非標準オプションをgrepサポート-oする場合:-P

grep -Po 'abc.*?def' < your-file

abcdef同じ行にあるとします。行ごとに複数のイベントを報告できます。

.*?ゼロ個以上の文字で構成されるシーケンスと一致します。できるだけ少ない、これは.*一致します多いほど良い。これは入力に影響を与えます。たとえば、0abc1def2def3with .*?、 you get abc1defwhile with .*、 you get abc1def2def(そして on 0abc1def2abc3def4, you get abc1defand abc3defvs abc1def2abc3def)。

0abc1abc2def3それにもかかわらず、次のような入力abc1abc2defから早いできるだけたくさん。

複数行のデータを一致させるには、次を使用できますperlPinはgrep -P実際にはPerlなどの正規表現で使用されます)。

perl -l -0777 -ne 'print for /abc.*?def/gs' < your-file

おすすめ記事