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"