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)