Perl 명령줄 정규식 불일치

Perl 명령줄 정규식 불일치

따라서 다음 형식의 콘텐츠가 포함된 파일이 있습니다.

randomString abc\/def/ghi/mno\/pq/r   abc\/def\/ghi/mno\/pq/r

내 의도는 두 개의 영숫자 문자열 사이의 모든 항목을 끝나는 단어에 or가 없는 경우로 바꾸는 것입니다. /따라서 이상적으로는 다음과 같아야 합니다.\/\/

randomString abc\/def\/ghi\/mno\/pq/r   abc\/def\/ghi\/mno\/pq/r

이것으로 거의 결과를 얻을 수 있습니다regEx

perl -pe 's/(\/\w+)\/(\w+\/|\w+\\)/$1\\\/$2/g' file

이게 나한테 돌아오네

randomString abc\/def\/ghi/mno\/pq/r   abc\/def\/ghi\/mno\/pq/r

ghi/mno어떤 이유로 문자열의 일부가 수정되지 않은 이유를 알 수 없습니다 .

perl명령줄에서 이 작업을 수행하는 방법을 찾고 있습니다 .

답변1

미리보기를 사용하여 다음 슬래시만 바꿀 수 있습니다.

  • (?<!\\)앞에 백슬래시가 없습니다.
  • (?!\w+\s)공백으로 끝나는 후속 단어 문자가 없습니다.

예를 들어

echo 'randomString abc\/def/ghi/mno\/pq/r   abc\/def\/ghi/mno\/pq/r' |
  perl -pe 's;(?<!\\)/(?!\w+\s);\\/;g'
randomString abc\/def\/ghi\/mno\/pq/r   abc\/def\/ghi\/mno\/pq/r

관련 정보