2017-02-09 7 views
1

、あなたが実行してすべての一致を置き換えることができます。正規表現の特定の範囲だけをsedと置き換えるにはどうすればよいですか? SEDで

sed 's/match/replace/g' 

それとも行うことによってのみ、N番目のマッチを置き換えることができます。

sed 's/match/replace/N' 

をそして、これら二つを組み合わせること、不特定の行動を持っている(ただし、置き換えられますが

sed 's/match/replace/gN' 

しかし< = N番目の一致または特定の範囲を置き換えるために、どのような方法があります:> = N番目)は、少なくともバッシュに一致します一致します(N からN など)? Perlのようなものが必要ですか?行が一致が含まれている場合はカウンタとして機能する行の最後にいくつかの文字列を追加し、

sed '/a/{s/$/####/;:l;s/a/x/3;:t;tt;s/#//;tl}' 

aaaaaaaaaaaaaaaaaaaa 
bbbbbbbbbbbbbbbbbbbb 

さて、これを試してみてください。

+0

'= N番目の一致を置換する 'はsed実装[GNU sed](https://stackoverflow.com/documentation/sed/1096/substitution/15518/pattern-flags-occurrence-replacement#t)に依存します。 = 201702090147396732356)はこれを文書化しています...正規表現ツールが 'N1からN2へ'をサポートしているかどうかはわかりません – Sundeep

答えて

0

> = NがNULLバイトと一致するすべてを置き換えます(AKAすべて< Nは前から一致する)あなた置き換えると、すべての一致を置き換え

sed 's/match/\x00/gN'

sed 's/match/replace/g'

置き換えすべてのnullバイトが元の一致に戻る:

sed 's/\x00/match/g'

0

は、この入力ファイルを想定します。ループを開始し、興味のある最初のマッチ(この例では3番目)を置き換えます。条件をリセットし、カウンタから1つの項目を切り捨てます。切断するものがあれば、ループを再開し、そうでない場合は終了します。

関連する問題