sed コマンドは、複数の文字列発生に異なるテキストを追加します。

sed コマンドは、複数の文字列発生に異なるテキストを追加します。

sedコマンドを使用して複数の文字列にテキストを追加したいと思います。

たとえば、

Hello world
types="program"
Mario
types="Game"
Hello world
types="program"
Mario
types="Game"

したがって、Marioが最初に登場したときに「firstMario」を追加し、次にMarioが登場したときに「secondMario」などを追加したいと思います。出力:

Hello world
types="program"
firstMario
types="Game"
Hello world
types="program"
secondMario
types="Game"

答え1

sed '
  /Mario/{
    s//first&/
    :1
      n
      s//second&/
    b1
  }'

または:

sed '
  1 {
    x;s/^/first/;x
  }
  /Mario/ {
    G
    s/\(Mario.*\)\n\(.*\)/\2\1/
    x;s/second/third/;s/first/second/;x
  }'

1行に複数のMarioを許可し、より多くの置換を一般化するには、次のようにしますperl

perl -pe 'BEGIN{@words=qw(first second third)}
          s/(?=Mario)/$words[$n++]/ge'

答え2

「最初、2番目、3番目...」を自動化された方法で使用するのが難しくなります。なぜなら、これらの内容はどこにも記載されていないからです(少なくとも標準ツールにはありません)。整数のソリューションを提供します。

n=$( grep -c '^Mario$' file )
for (( i=1 ; i<=$n ; i++ )) ; do
  sed -i "1,/^Mario$/s/^Mario$/$i&/" file
done

出力:

Hello world
types="program"
1Mario
types="Game"
Hello world
types="program"
2Mario
types="Game"

関連情報