단어 인스턴스를 추가된 개수로 교체

단어 인스턴스를 추가된 개수로 교체

"name"이라는 단어가 여러 번(250회) 포함된 파일이 있습니다.

"name"의 각 인스턴스를 name_1, name_2, name_3....name_250과 같은 추가된 개수로 바꿔야 합니다.

sed를 사용하여 이 작업을 수행할 수 있나요?

어떤 플래그를 사용해야 합니까?

답변1

직업 perl:

perl -pe 's/\bname\b\K/"_".++$n/ge'

답변2

여기에는 산술이 포함되므로 에 대한 좋은 질문은 아닙니다 sed. 그러나 awk다음과 같이 처리하는 것이 가능합니다.

awk '{for (i=1;i<=NF;i++) { if ($i=="name") {c++;$i=$i"_"c} }} 1'

예를 들어:

$ echo  a name b name name c d name | awk '{for (i=1;i<=NF;i++) { if ($i=="name") {c++;$i=$i"_"c} }} 1'
a name_1 b name_2 name_3 c d name_4

설명하다:

  • {for (i=1;i<=NF;i++) { if ($i=="name") {c++;$i=$i"_"c} }}

    for루프는 입력에서 발견된 각 단어를 반복합니다. 단어가 이면 name카운터 변수가 c증가하고 해당 값이 단어에 추가됩니다.

  • 1

    언어 에서 awk이 비밀스러운 속기는 전체 줄을 인쇄한다는 의미입니다.

부작용으로 불필요한 공백이 제거됩니다. 여기에는 각 줄의 선행 및 후행 공백이 포함되며 단어 간 공백은 단일 공백으로 줄어듭니다.

답변3

간단한 Bash 스크립트에서

#!/bin/bash
count=0
search="linux"

while read line
do
      for word in ${line}
      do
           if [[ $word == $search ]]
           then
                printf "${word}_${count} "
                ((count++))
           else 
                printf "$word "
           fi
      done
      echo 
done < input_file

관련 정보