다음과 유사한 문자열을 포함하는 파일이 많이 있습니다.
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개 이상인 경우 (
로 변경합니다 )
.