2

現在、次のファイルがあります。

<refrigerator>
    <food="watermelon" location="topShelf" />
    <!--
    <food="mango" location="bottomShelf" />
    --> 
    <!--
    <food="orange" location="middleShelf" />
    --> 
</refrigerator>

「sed」を使用して削除<!---->、「mango」をファイルからコメント解除するにはどうすればよいですか? ただし、ファイルに他の行がコメントされている場合は、コメントのままにしておきますか?

ありがとう!

4

3 に答える 3

3

あなたと一緒sedに試すことができます:

sed '/<!--/{ N; N; s/.*\n\(.*food="mango".*\)\n.*-->.*/\1/; }' file
于 2013-02-26T00:09:37.173 に答える
3

sedこれには適切なツールではありません (デフォルトでは複数行ではありません)。を使用してみてください。これは、このケースにより適しています:

$ perl -i -0777 -pe 's/\s*<!--\s*\n(.*?food="mango".*?)\n\s*-->/\n$1/' file.txt

出力

<refrigerator>
    <food="watermelon" location="topShelf" />
    <food="mango" location="bottomShelf" /> 
    <!--
    <food="orange" location="middleShelf" />
    --> 
</refrigerator>

説明

  • -iその場でファイルを編集します(のようにsed -i
  • -0777ファイル全体を一度に読む (段落ごとに読むこともできます-00)
  • -p「while (<>) { ... }」がプログラムをループすると仮定し、改行を出力します
  • s///sed同様の置換のスケルトンです
  • \sPerlの空白文字です
  • .*?貪欲でない一致を表します
  • $1sed と同じ\1(キャプチャ部分)

ドク

見る

于 2013-02-26T00:23:30.610 に答える