Итак, у меня есть файл с содержимым в следующем формате,
randomString abc\/def/ghi/mno\/pq/r abc\/def\/ghi/mno\/pq/r
My намерение состоит в том, чтобы заменить все вхождения /
на \ /
между двумя буквенно-цифровыми строками, если в конечном слове нет \
или /
, поэтому в идеале это должно быть
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
.
Вы можете использовать поисковые пути для замены только тех косых черт, которые:
(? , перед которыми не стоит обратная косая черта
(?! \ 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