2

2番目から始まるすべての一致を置き換えることができることをsed読みました

数値を g (グローバル) フラグと組み合わせることができます。たとえば、最初の単語をそのままにして、2 番目、3 番目などを DELETED に変更する場合は、/2g を使用します。

sed 's/foo/bar/2g' a.txt

しかし、3 番目、4 番目などに影響を与えないように、2 番目までの一致をどのように置き換えることができますか? 何かのようなもの

sed 's/foo/bar/1-2' a.txt
4

3 に答える 3

2

これはうまくいくかもしれません(GNU sed):

sed 's/foo/&\n/2;T;h;s//bar/g;G;s/\n.*\n//' file

意図した文字列の n 番目の出現箇所をそれ自体と改行で置き換えます。置換が失敗した場合は、パターン スペース (PS) をホールド スペース (HS) にコピーします。置換文字列を使用して置換を行い、元の行を変更された行で再構成します。

また:

sed 's/foo/\n/g;s/\n/foo/3g;s/\n/bar/g' file

1 から n 番目の代わりに n 番目 +1 が使用される場合

于 2013-02-23T19:07:35.047 に答える
0

Chirloの答えを拡張する...

replace_string=s/foo/bar
n=2
replace_string_n=`python -c 'print "'$replace_string';"*'$n`

sed $replace_string_n a.txt
于 2013-02-23T18:29:13.130 に答える
0

最も簡単な方法は次のとおりです。

sed 's/foo/bar; s/foo/bar' a.txt

これにより、の最初の2つのオカレンスが効果的に置き換えられfooます。1行に2回パスし、常に最初のパスを置き換えます。2番目のパスでは、最初のパスfooがすでに置き換えられているため、2番目のパスは元の2番目のオカレンスを最初のパスと見なします。

于 2013-02-23T18:12:09.987 に答える