GNU/Linux >> Linux の 問題 >  >> Linux

各行でN番目の一致が見つかった後のパターンの置き換え??

この質問にはすでに回答があります :sed:最初の文字列を除くすべての文字列を削除します

(4つの回答)
2年前に閉じられました。

行を含むファイルがあります:

india;austria;japan;chile
china;US;nigeria;mexico;russia

各行のセミコロンの出現箇所をすべて、たとえば次のように置き換えたいと思います。 ;NEW; 、ただし2回目からのみ。結果は次のようになります。

india;austria;NEW;japan;NEW;chile
china;US;NEW;nigeria;NEW;mexico;NEW;russia

これをgsubで試しましたが、すべてのオカレンスが置き換えられます:
awk '/;/{gsub(/;/,";NEW;") }{print}'

承認された回答:

awk ソリューションははるかに長くなりますが、一般的なものにするのは簡単です:

awk -F; '{for(i=1;i<NF;i++)printf"%s;%s",$i,(i>=2)?"NEW;":"";print$NF}' replacefile

sedでそれを行うことは可能です また、tでループを作成します コマンドを実行し、常に2番目(または必要な方)の区切り文字を一時的なマーク(通常はn)に置き換えます ):

sed ':b;s/;/n/2;tb;s/n/;NEW;/g' replacefile

Linux
  1. Sedを使用してパターン範囲間の行を検索および置換

  2. Sedを使用してパターンマッチ後に前の行を印刷しますか?

  3. カスタム正規表現区切り文字を使用してパターンを含む行番号を見つけますか?

  1. 特定の行でOsxインサートをSedしますか?

  2. Bash で、ファイルの各行の後に文字列を追加するにはどうすればよいですか?

  3. bashを使用して、ファイルの各行の先頭にある空白を削除します

  1. 最初の一致でのみ挿入する sed

  2. sedにおける「ホールド空間」と「パターン空間」の概念

  3. sed - 一致後に X 行の後に行を挿入する