awk에서 gsub를 사용하여 단어를 괄호로 대체

안녕하세요 gsub를 사용하여 괄호가있는 단어를 대체하려면 어떻게해야합니까?

여기 ABC (T)를 ABC / G로 바꾸고 싶습니다.

awk " {gsub("ABC\(T\)","ABC/G")}; Print $0" "$FILENAME" > tmp.tmp && mv tmp.tmp "$FILENAME" 

Answer

gsub// 형식을 사용하면 모든 것을 단순화 할 수 있습니다.

$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}; print $0" ABC/G 

그런 다음 인수없이 print를 사용하여 더 단순화 할 수 있습니다 (print $0와 동일). 인쇄를위한 1 속기 (1;<와 같이 true로 평가되는 표현식에 대한 기본 awk 작업) / div>는 현재 줄을 인쇄하는 것입니다.) :

$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}1" ABC/G 

개인적으로는 awk이를 위해 다른 도구를 사용하면 구문이 더 짧고 깔끔합니다.

$ echo "ABC(T)" | sed "s|ABC(T)|ABC/G|" ABC/G $ echo "ABC(T)" | perl -pe "s|ABC\(T\)|ABC/G|" ABC/G 

Answer

아주 친했습니다. 두 개의 \ 만 필요했습니다. 세트 중 하나는 BASH를 통과하는 텍스트 자체를위한 것이고 다른 하나는 awk에 의해 파싱되는 실제 \이기 때문입니다. 이것은 나를 위해 일하는 것 같습니다.

echo "ABC(T)" | awk " {gsub("ABC\\(T\\)","ABC/G")}; Print $0" "$FILENAME" 

그리고 다음을 제공합니다 :

ABC/G 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다