除了每个字符串的最后一个之外,我想用字母数字和反斜杠+斜杠“\ /”替换所有斜杠“/”,例如。
nocareNocare abc\/def/ghi/mno\/pq/r abc\/def\/ghi/mno\/pq/r
应该成为:
nocareNocare abc\/def\/ghi\/mno\/pq/r abc\/def\/ghi\/mno\/pq/r
我用:
sed 's/\(.*\)\([[:alnum:]]\)\/\([[:alnum:]]\)\(\S*\)\(\\\|\/\)/\1\2\\\/\3\4\//g'
简短说明:匹配
任何字符串+ alnum + / +任何非白色+ /或\
但它只能替换一个案例,所以我需要运行它3次以替换所有3次出现。看起来它第一次匹配到:
>nocareNocare abc\/def/ghi/mno\/pq/r abc\/def\/ghi/
而不是
>nocareNocare abc\/def/
答案 0 :(得分:3)
sed -e :a -e 's|\([a-z0-9]\)/\([a-z0-9][^ ]*[a-z0-9]/[a-z0-9]\)|\1\\/\2|;ta' filename
松散翻译,这说“在字符串中替换一个单独的斜线后跟一些其他东西,然后是另一个单斜线,反斜杠和相同的东西(和第二个斜线)。并且在做了这样的替换之后,重新开始。“
答案 1 :(得分:1)
使用GNU sed:
sed -E 's:([^\])/:\1\\/:g;s:\\/([^\]*( |$)):/\1:g' file
这里有两个s
命令:
s:([^\])/:\1\\/:g
将所有/
替换为\
之后\/
s:\\/([^\]*( |$)):/\1:g
使用\/
/
答案 2 :(得分:1)
您可以根据以下perl
使用regEx
命令行解决方案
(?<!\\)
前面没有反斜杠
(?!\w+\s)
后面没有以空白字符结尾的单词字符
perl -pe 's;(?<!\\)/(?!\w+\s);\\/;g' file
nocareNocare abc\/def\/ghi\/mno\/pq/r abc\/def\/ghi\/mno\/pq/r