따라서 다음 형식의 콘텐츠가 포함된 파일이 있습니다.
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