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
  }'

한 줄에 여러 개의 Mario를 허용하고 더 많은 대체를 일반화하려면 다음을 사용합니다 perl.

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

답변2

"첫 번째, 두 번째, 세 번째..."를 자동화된 방식으로 사용하는 데 어려움을 겪게 될 것입니다. 왜냐하면 이러한 내용은 어디에도 설명되어 있지 않기 때문입니다(적어도 표준 도구에는 없음). 정수 솔루션을 제공하겠습니다.

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"

관련 정보