특정 단어를 제거하고 파일의 문자열 끝에 단어를 설정합니다.

특정 단어를 제거하고 파일의 문자열 끝에 단어를 설정합니다.

다음과 유사한 문자열을 포함하는 파일이 많이 있습니다.

Get<1>(abc)
Get<2>(xyz)

위 패턴을 사용하여 모든 파일을 재귀적으로 검색하고 첫 번째 "(" 앞의 모든 파일을 제거하고 그 뒤에 문자열을 넣으려면 어떻게 해야 합니까?

원하는 출력:

abc.val()
xyz.val()

abc와 xyz는 무엇이든 변경할 수 있으며 "<"와 ">" 사이의 숫자는 중요하지 않습니다.

편집하다:

파일 확장자는 .cc 및 .h입니다.

또한 문자열은 항상 Get으로 시작합니다.

답변1

GNU를 사용하여 grep해당 패턴을 한 번 이상 포함하는 파일을 찾고 GNU를 사용하여 sed내부 교체를 수행할 수 있습니다.

ere='Get<[[:digit:]]+>\(([[:alnum:]_]+)\)'
grep -rlEZe "$ere" . |
  xargs -r0 sed -i -E "s/$ere/\1.val()/g"

이는 [[:alnum:]_]+하나 이상의 영숫자 문자 또는 밑줄의 시퀀스와 일치합니다. [^()]*또는를 제외한 문자가 0개 이상인 경우 (로 변경합니다 ).

관련 정보