RegEx командной строки Perl не соответствует

Итак, у меня есть файл с содержимым в следующем формате,

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 .

0
14.12.2016, 18:33
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
2
28.01.2020, 02:34

Теги

Похожие вопросы