찾기 및 바꾸기에 와일드카드 사용 sed를 사용하여 찾기 및 바꾸기

찾기 및 바꾸기에 와일드카드 사용 sed를 사용하여 찾기 및 바꾸기

sed그래서 와일드카드로 검색할 때도 사용법을 이해합니다 .*. 내가 직면한 문제는 명령의 검색 및 바꾸기 부분에서 찾기 및 바꾸기에 와일드카드를 두 번 사용하는 방법입니다. 다음 예는 이를 더 잘 설명하는 데 도움이 됩니다.

$cat test.txt
a(bc)
a(l)
a(d)
a(loke)
a(babab)
a(h323)
$

_mynewstring그 뒤에 오는 내용에 문자열을 추가하고 싶습니다 a([string of some length].참고하세요각 줄에 다른 오른쪽 대괄호가 있기 때문에 단순히 오른쪽 대괄호를 찾아서 바꿀 수는 없지만(예제를 위해 생략했습니다) 그 중 어느 것도 앞에 일치하는 왼쪽 대괄호가 없습니다 a. 출력은 다음과 같아야 합니다.

$cat test.txt
a(bc_mynewstring)
a(l_mynewstring)
a(d_mynewstring)
a(loke_mynewstring)
a(babab_mynewstring)
a(h323_mynewstring)
$

나는 다음을 시도했습니다.

sed -i 's/a(.*)/a(.*_mynewstring)/g' test.txt

하지만 이것은 단지 출력일 뿐이고,

cat test.txt
a(.*_mynewstring)
a(.*_mynewstring)
a(.*_mynewstring)
a(.*_mynewstring)
a(.*_mynewstring)
a(.*_mynewstring)

분명히 와일드카드는 내가 필요로 하는 것이 아닌 리터럴 문자열로 처리되지만 철저한 인터넷 검색 후에는 어떻게 해야 할지 잘 모르겠습니다. awk, , 및 이 세 가지를 조합하여 grep솔루션을 시도했지만 성공하지 못했습니다. 당신이 제공할 수 있는 도움에 감사드립니다.

답변1

를 이스케이프 처리 (하고 not 을 검색하세요 ). 일치하는 그룹을 유지하는 데 사용됩니다 \1.

sed 's/a\(([^)]*\))/a\1_mynewstring)/g' file1

다음을 제공합니다:

a(bc_mynewstring)
a(l_mynewstring)
a(d_mynewstring)
a(loke_mynewstring)
a(babab_mynewstring)
a(h323_mynewstring)

관련 정보