我需要以这种格式替换所有\ for / in路径:
util.RenderTemplate(w, "auth\\profile", c)
util.RenderTemplate(w, "auth\\something\\extra", c)
路径可以有最多三个级别,有两个分隔符,但是我想为n级编写一些通用的内容,n-1分隔符。
我带了一个简单的sed查询sed -n -E "s:(util.RenderTemplate\(w,.+)\\\(.+, c\)):\1/\2:p" file
,但这让我进去了
util.RenderTemplate(w, "auth\/profile", c)
util.RenderTemplate(w, "auth\\something\/extra", c)
因此,它只工作一个2级路径,并没有正确地替换,因为它离开了捕获组。
我修改了sed查询如下:
sed -n -E 's:(util.RenderTemplate\(w,[^\]+)\\\\([^\]+, c\)):\1/\2:p' file
util.RenderTemplate(w, "auth/profile", c)
THIS EVEN DID NOT FOUND util.RenderTemplate(w, "auth\\something\\extra", c)
我接近解决方案,否定组^它没有携带额外的\从捕获组,但它不工作时,在路径是多个分隔符.有人能帮我解决问题和解释吗?
我期待着找到并替换甚至多层次的路径,所以
util.RenderTemplate(w, "auth\\something\\extra", c)
替代物
util.RenderTemplate(w, "auth/something/extra", c)
发布于 2020-12-20 04:10:24
您可以使用此sed
sed '/util\.RenderTemplate/s~\\\\~/~g' file
util.RenderTemplate(w, "auth/something/extra", c)
这个awk
也应该能工作
awk -F '\\\\\\\\' -v OFS=/ '/util\.RenderTemplate/ {$1=$1} 1' file
发布于 2020-12-20 04:55:39
使用awk
的全局替换函数,您也可以尝试跟踪。
awk '/util\.RenderTemplate/{gsub(/\\\\/,"/")} 1' Input_file
逻辑解释:使用gsub
(全局替换)替换\\
(在这里,我正在转义\
,使其像\\
一样,使其成为\\\\
2次\\
,以便awk
将\
作为字面字符处理),以/
所有出现的形式出现。1
将打印当前编辑的/未经编辑的行。
https://stackoverflow.com/questions/65378954
复制