단어 끝을 다른 것으로 바꾸기

단어 끝을 다른 것으로 바꾸기

나는 이것을 가지고있다:

echo "walking ringer talking"

sed를 사용하여 다음 출력을 얻으려면 어떻게 해야 합니까?

walked ringer talked

여러 가지 방법을 시도했지만 제대로 작동하지 않습니다. 다음 명령은 내가 시도한 것입니다.

echo "walking ringer talking" | sed 's/ing/ed/g'

이 출력은 walked reder talked.

echo "walking ringer talking" | sed 's/ing$/ed/g' 

이 출력은 walking ringer talked.

echo "walking ringer talking" | sed 's/^ing/ed/g;s/ing$/ed/g' 

이 출력은 walking ringer talked.

bash 스크립트에서 이 작업을 수행하려고 합니다.

답변1

패턴 끝의 공백이나 개행 문자를 일치시키려면 다음을 사용할 수 있습니다.

sed -E 's/ing( |$)/ed\1/g'

답변2

awk는 문자열을 세 부분으로 나누고 필요한 요소를 대체합니다. 그러면 print $0전체 (새) 문자열이 반환됩니다 .

echo $s | awk 'BEGIN{a[1]=a[3]}{for(x in a)gsub("ing","ed",$x); print $0 }'

답변3

"단어 끝" 태그를 사용할 수 있습니다.

$ echo "walking ringer talking" | sed 's/ing\>/ed/g'
walked ringer talked

\>왼쪽의 단어 문자와 오른쪽의 단어가 아닌 문자를 일치시킵니다.

또는 덜 구체적으로 단어 경계를 사용하면 다음과 같습니다.

$ echo "walking ringer talking" | sed 's/ing\b/ed/g'
walked ringer talked

\b모든 단어 경계와 일치하지만 단어 문자 뒤에 오는 경우 와 동일합니다 \>.

답변4

's/ing /ed /g;세 번째 테스트에서는 공간을 추가합니다.

#echo "walking ringer talking" | sed 's/^ing/ed/g;s/ing$/ed/g' 
echo "walking ringer talking" | sed 's/ing /ed /g;s/ing$/ed/g'

예를 들어:

user@host:/tmp/test$ echo "walking ringer talking" | sed 's/ing /ed/g;s/ing$/ed/g' 
walked ringer talked

관련 정보