所以我有一个包含以下格式内容的文件,
randomString abc\/def/ghi/mno\/pq/r abc\/def\/ghi/mno\/pq/r
我的意图是,如果结尾单词没有或,则用替换两个字母数字字符串之间的所有出现,/
因此理想情况下应该是\/
\
/
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