Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式将模板路径琥珀色替换为sed_Regex_Sed - Fatal编程技术网

Regex 正则表达式将模板路径琥珀色替换为sed

Regex 正则表达式将模板路径琥珀色替换为sed,regex,sed,Regex,Sed,我需要以以下格式替换所有\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

我需要以以下格式替换所有\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”文件
但这让我进去了

util.RenderTemplate(w, "auth\/profile", c)
util.RenderTemplate(w, "auth\\something\/extra", c)

因此,它只能使用一个2级路径,并且不能正确替换,因为它离开了捕获组

我对sed查询进行了如下修改:

sed-n-E的:(util.RenderTemplate\(w,[^\]+)\\\\([^\]+,c\):\1/\2:p'文件

util.RenderTemplate(w, "auth/profile", c)
THIS EVEN DID NOT FOUND util.RenderTemplate(w, "auth\\something\\extra", c)
我接近于否定组的解决方案[^]它没有携带额外的信息\ 来自捕获组,但当in path为多个\分隔符时它不起作用。。。 有人能帮我找到普遍的解决办法和解释吗

我希望找到并替换甚至多层次的路径 那么这个

替代

util.RenderTemplate(w, "auth/something/extra", c)

您可以使用此
sed

sed'/util\.RenderTemplate/s~\\~/~g'文件
util.RenderTemplate(w,“auth/something/extra”,c)
awk
也应起作用

awk -F '\\\\\\\\' -v OFS=/ '/util\.RenderTemplate/ {$1=$1} 1' file

使用
awk
的全局替换功能,您也可以尝试以下操作

awk '/util\.RenderTemplate/{gsub(/\\\\/,"/")} 1' Input_file

逻辑解释:使用
gsub
(全局替换)替换
\
(在这里我转义
\
,使它像
\\
一样,因此它变为
\\\\
两次
\\
,以便
awk
\
视为文字字符)使用
/
它的所有引用
1
将打印当前已编辑/未编辑的行。

您的预期输出是什么?我添加了我的预期,需要替换所有\\for/甚至在像A\\B\\C\\D这样的路径中,不仅单个分隔的A\\BIt看起来有效,而且它还替换util.RenderTemplate之外的路径,它可以被修复,因为只有2个位置,但我只想在util.RenderTemplate(w,“A\\B\\C”,C)中替换,其中替换发生在字符串“A\\B\\C”中。您可以尝试:
sed'/util\.RenderTemplate/s~\\\\\/~g'文件
awk '/util\.RenderTemplate/{gsub(/\\\\/,"/")} 1' Input_file