2

次のように正規表現一致の間の部分を印刷したいと思います。

echo "this is foo and another foo quux" | sed 's/this\(.*\)another.*/\1/'

印刷する

 is foo and

これと別の印刷物の一部を取得したいので、まったく問題ありません。

しかし、ソースコードを解析して使用したい場合:

cat source_code | sed 's/.*AdulterateFood\(.*\)DangerousFood.*/\1/'

そして、AdulterateFood と DangerousFood はソース コードで 1 回だけであることを知っていますが、ファイル全体のすべてを出力します:( なぜだろうか.. AdulterateFood と DangerousFood は別の行にあります。

ご提案いただきありがとうございます。

4

2 に答える 2

5

sed は、デフォルトで各入力行を出力します。この動作を望まない場合は、 -n オプションを追加する必要があります。次に、RE に一致する行を出力する場合は、置換コマンドの最後に「p」を追加して、sed にその行を出力するように指示する必要があります。したがって、この:

sed -n 's/.*AdulterateFood\(.*\)DangerousFood.*/\1/p' source_code

あなたが求めているもののようですが、サンプル入力と期待される出力を提供しなかったので、それは単なる推測です.

于 2012-12-30T11:25:02.813 に答える
1

AdulterateFoodとDangerousfoodの間のすべての行を印刷するには:

sed -n '/AdulterateFood/,/DangerousFood/p' file
于 2012-12-30T10:21:13.650 に答える