0

Mac osx 10.6.8 で Sed を使用して、Geektool で実行されるテキスト エディターで .command ファイルを作成します。文字列 MYSTRING があり、そこからリンク タグを削除しようとしています。しかし、ワイルドカードを使用すると、Sed が選択する範囲が長すぎるようです。

MYSTRING="<link>part_1</link>This part must remain.<link>part_x</link> Like this part."
echo $MYSTRING |
sed s/"<link>".*"<\/link>"//g

私はこの結果を期待していました:

This part must remain. Like this part.

しかし、実際の結果は次のとおりです。

 Like this part.

Sed は最初のリンクを from-value として、最後の /link を to-value として取り、その間のすべてを削除しているようです。/link の後に最後ではなく最初の /link を取得する必要があることを Sed に理解させるにはどうすればよいですか?

4

2 に答える 2

1

.*貪欲だから。試す:

sed 's@<link>[^<]*</link>@@g'
于 2012-08-05T10:50:54.043 に答える
1

正規表現の繰り返し演算子の動作は、*可能な限り長く、左端の一致に一致することです。残念ながら、sedけちなマッチングはサポートしていませんが、Perlはサポートしています。

perl -pe 's%<link>.*?</link>%%g'

または、欲張りマッチングに問題がない正規表現を作成することもできます。

sed 's%<link>[^<>]*</link>%%g'
于 2012-08-05T10:52:34.290 に答える