1

sedファイル内のさまざまなテキストを置き換えるために使用しています。例:

sed -i "s/a/b/g" ./file.txt

私のファイルの各行には、が含まれています]。これは、閉じ角かっことスペースです。私はこれより前に何も交換したくありません。ここにいくつかのサンプルラインがあります:

This is some text ] This is some other text.
                    ^

交換を開始できる場所を示すためにニンジンを配置しました。他の閉じ角かっこは、行の後半に表示される場合がありますが、前には表示されません。例:

This is some more text ] This is yet some other text ] This is some more.
                         ^

これは、ニンジンの後のマッチを置き換えます。後の角括弧は重要ではありません。

  • sed行に最初に表示された後に見つかった一致のみを置き換えるように制限するにはどうすればよい]ですか?
4

2 に答える 2

2

できるよ:

sed -i 's/^\([^]]*].*\)a/\1b/' file.txt

-i使用するフラグは非posix拡張であることに注意してください。

于 2012-05-15T02:40:27.127 に答える
2

これまでの他の回答は、「]」の後に1回だけ発生する場合にのみ、「a」を置き換えます。グローバル仕様を使用しているのでg、閉じ括弧の後に「a」が複数回出現する可能性があり、それらすべてを置き換えたいと思います。これを行うには、「分割統治」法を使用します。

$ echo "foo abc ] bar ] baz" | sed 's/] /&\n/;h;s/.*\n//;s/a/X/g;x;s/\n.*//;G;s/\n//'
foo abc ] bXr ] bXz

これは、最初の閉じ角括弧のみを考慮します。

于 2012-05-15T04:43:09.400 に答える