Regex sed替换文件名以引号开头

Regex sed替换文件名以引号开头,regex,linux,string,replace,sed,Regex,Linux,String,Replace,Sed,我在文件中有一些字符串,如img src=“../image/popup.jpg”,或bg:'images/xxx/popup.png'。我想用另一个sed字符串替换整个文件路径/名称,我试过了 sed 's/^"[^\s]*/somethingelse/g' 试试这个 sed 's|/some/UNIX/path|/a/new/path|g' files 试试这个 sed 's|/some/UNIX/path|/a/new/path|g' files 使用sed替换路径名时,更改其

我在文件中有一些字符串,如
img src=“../image/popup.jpg”
,或
bg:'images/xxx/popup.png'
。我想用另一个sed字符串替换整个文件路径/名称,我试过了

sed 's/^"[^\s]*/somethingelse/g' 
试试这个

 sed 's|/some/UNIX/path|/a/new/path|g' files
试试这个

 sed 's|/some/UNIX/path|/a/new/path|g' files

使用sed替换路径名时,更改其默认路径名会有所帮助,正如Skynet所指出的,明智地使用单引号可以实现如下的变量插值:

> a="\"hello/bye\""
> b="\"one/two\""
> echo $a
"hello/bye"
> echo $b
"one/two"
> echo $a|sed -e 's|'$a'|'$b'|'
"one/two"

sed不支持POSIX。2基本正则表达式“完全是因为性能问题”,但它很接近。根据,POSIX正则表达式的规则之一是“使用反斜杠转义从来都不是元字符的字符是错误的。”由于双引号和单引号不是元字符,因此不应根据这一点在POSIX正则表达式中反斜杠。

当使用sed替换路径名时,更改其默认值会有所帮助,正如Skynet所指出的,明智地使用单引号可以实现如下变量插值:

> a="\"hello/bye\""
> b="\"one/two\""
> echo $a
"hello/bye"
> echo $b
"one/two"
> echo $a|sed -e 's|'$a'|'$b'|'
"one/two"

sed不支持POSIX。2基本正则表达式“完全是因为性能问题”,但它很接近。根据,POSIX正则表达式的规则之一是“使用反斜杠转义从来都不是元字符的字符是错误的。”由于双引号和单引号不是元字符,因此不应根据这一点在POSIX正则表达式中反斜杠。

使用
sed
和BRE:

sed "s/\([\"']\)[^\"']*\([\"']\)/\1somethingelse\2/g" file
与ERE合作:

sed -r "s/([\"'])[^\"']*([\"'])/\1somethingelse\2/g" file

假设文件名中没有转义引号,即在
“…”和
“…”中没有引号
使用
sed
和BRE:

sed "s/\([\"']\)[^\"']*\([\"']\)/\1somethingelse\2/g" file
与ERE合作:

sed -r "s/([\"'])[^\"']*([\"'])/\1somethingelse\2/g" file

假设文件名中没有转义引号,即,
“…”
“…”

中没有引号,我只知道文件名,但路径需要由regexCan匹配。您只需要全局用单引号替换双引号吗?文件名是硬的,因为它们可以包含转义引号。如果这是html,那么最好使用html解析器。或子图像/xxx与其他内容。。也看到了,我只知道文件名,但是路径需要由regexCan匹配,你只是全局用单引号替换双引号吗?文件名是硬的,因为它们可以包含转义引号。如果这是html,那么最好使用html解析器。或子图像/xxx与其他内容。。你也看到了吗