저는 Linux 드라이버를 유지 관리하고 있으며 드라이버의 모든 %p를 %pK로 바꾸고 싶습니다. 이를 위해 다음 명령을 사용했습니다.
grep "%p[^K]" -Rl . | xargs sed -i 's/%p[^K]/%pK/g'
다음과 같은 경우에는 실패합니다.
%p-%p --> %pK%pK (hyphen is removed)
sed 명령이 제대로 작동하도록 올바른 정규식을 제안하십시오.
답변1
질문의 sed 대체는 a가 일치하는 문자열의 일부이기 %p
때문에 대시뿐만 아니라 a 뒤의 모든 문자를 제거합니다. (이스케이프 처리된) 대괄호를 사용하여 다음 문자를 캡처한 다음 를 사용하여 다시 배치하면 이 문제를 해결할 [^K]
수 있습니다 . 존재하다 :%p
\1
sed
$ echo '%p %p %pK' | sed 's/%p\([^K]\)/%pK\1/g'
%pK %pK %pK
[^a-zA-Z]
다른 수정자를 사용하려는 경우 또는 이와 유사한 것을 사용하고 싶을 수도 있습니다 %p
.
답변2
다음 명령은 나에게 놀라운 일입니다
for fname in $(grep "%p[^K]" -Rl .); do perl -pi -e 's/%p(?!K)/%pK/g' $fname; done
Sundeep님, 귀하의 의견이 매우 도움이 되었습니다. :)