![특정 단어를 제거하고 파일의 문자열 끝에 단어를 설정합니다.](https://linux55.com/image/207358/%ED%8A%B9%EC%A0%95%20%EB%8B%A8%EC%96%B4%EB%A5%BC%20%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B3%A0%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%EB%81%9D%EC%97%90%20%EB%8B%A8%EC%96%B4%EB%A5%BC%20%EC%84%A4%EC%A0%95%ED%95%A9%EB%8B%88%EB%8B%A4..png)
다음과 유사한 문자열을 포함하는 파일이 많이 있습니다.
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개 이상인 경우 (
로 변경합니다 )
.