Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
使用sed和regex搜索到下一个字符_Regex_Unix_Batch File - Fatal编程技术网

使用sed和regex搜索到下一个字符

使用sed和regex搜索到下一个字符,regex,unix,batch-file,Regex,Unix,Batch File,我得到了一个带有URL的图像,如: 我使用的是sed“s///g” 所以我尝试的是替换src值,但大多数情况下是完全不同的 有没有一种方法可以使用sed“s/src=\”(直到第一次)/newurl/g“ 额外信息: 我在Windows上使用Cygwin 而my.bat文件中的PATH=C:\cygwin\bin将匹配除“之外的任何字符,因此您可以使用: sed 's/src="[^"]*"/src="NEWURL"/g' 例如: [me@home]$ echo '<img alt=

我得到了一个带有URL的图像,如:

我使用的是
sed“s///g”

所以我尝试的是替换src值,但大多数情况下是完全不同的

有没有一种方法可以使用
sed“s/src=\”(直到第一次)/newurl/g“

额外信息:

我在Windows上使用Cygwin 而my.bat文件中的
PATH=C:\cygwin\bin
将匹配除
之外的任何字符,因此您可以使用:

 sed 's/src="[^"]*"/src="NEWURL"/g'
例如:

[me@home]$ echo '<img alt="" src="http://www.example-site.com/folder_with_underscore/folder-with-dash/3635/0/235/NumBerS_and_Uc/image.png" />' | sed 's/src="[^"]*"/src="http:\/\/stackoverflow.com"/g'
<img alt="" src="http://stackoverflow.com" />
正则表达式是贪婪的,因此将占用尽可能多的字符,从而匹配到最后出现的
。虽然这在上面的示例中也会起作用,但如果您的输入中有其他内容也包含
,则它的行为将不符合预期

[^”]
将匹配除
之外的任何字符,因此您可以使用:

 sed 's/src="[^"]*"/src="NEWURL"/g'
例如:

[me@home]$ echo '<img alt="" src="http://www.example-site.com/folder_with_underscore/folder-with-dash/3635/0/235/NumBerS_and_Uc/image.png" />' | sed 's/src="[^"]*"/src="http:\/\/stackoverflow.com"/g'
<img alt="" src="http://stackoverflow.com" />

正则表达式是贪婪的,因此将占用尽可能多的字符,从而匹配到最后出现的
。虽然这在上面的示例中也会起作用,但如果您的输入中有其他内容也包含
,则它的行为将不符合预期

Shawn的解决方案基本上是正确的,但它没有处理在src url中出现换行符的情况
sed
确实不擅长处理此类情况,但您可以破解一个解决方案:

sed '/src/{
/src="[^"]*"/{ s//src="NEWURL"/; n; }
s/src=".*$/src="NEWURL"/
p
:a
s/.*//;
N
/"/!ba
s/[^"]*"//
}
' input

请注意,上面的许多换行在sed的某些版本中是多余的,但在其他版本中是必需的。(尤其是
:a
之后和分支命令之后的换行符,因为某些版本的sed只会在换行符处终止标签。我认为允许标签以分号终止的sed版本并不严格符合标准,但这是一种常见做法。)此脚本在适当的情况下进行简单的替换,但是如果在
src=“
”之后没有找到引号,它将进入一个循环,删除行,直到看到终止的
。这是一个丑陋的解决方案,我建议不要使用sed解析xml。

Shawn的解决方案基本上是正确的,但它不处理src url中出现换行符的情况
sed
确实不擅长处理此类情况,但您可以破解一个解决方案:

sed '/src/{
/src="[^"]*"/{ s//src="NEWURL"/; n; }
s/src=".*$/src="NEWURL"/
p
:a
s/.*//;
N
/"/!ba
s/[^"]*"//
}
' input

请注意,上面的许多换行在sed的某些版本中是多余的,但在其他版本中是必需的。(尤其是
:a
之后和分支命令之后的换行符,因为某些版本的sed只会在换行符处终止标签。我认为允许标签以分号终止的sed版本并不严格符合标准,但这是一种常见做法。)此脚本在适当的情况下进行简单的替换,但是如果在
src=“
”之后没有找到引号,它将进入一个循环,删除行,直到看到终止的
。这是一个丑陋的解决方案,我建议不要使用sed解析xml。

Thnx,它在终端中工作。。。因此,在批处理文件中,它可能类似于:sed's/src=“[^”]*”/src=“http:\/\/stackoverflow.com”/g'input.txt>output.txtC:\xxxxxx>echo'alt=“”/src=“/235/NumBerS\u and_Uc/image.png”/0';sed's/src=“[^”*”/src=“http:\/\/stackoverflow.com”/g”系统找不到指定的文件。Thnx,该文件在终端中工作。。。因此,在批处理文件中,它可能类似于:sed's/src=“[^”]*”/src=“http:\/\/stackoverflow.com”/g'input.txt>output.txtC:\xxxxxx>echo'alt=“”/src=“/235/NumBerS\u and_Uc/image.png”/0';sed's/src=“[^”]*”/src=“http:\/\/stackoverflow.com”/g”系统找不到指定的文件。Thnx获取额外信息,如果我的src-url(+1)Thnx中有换行符,我会使用它作为额外信息,如果我的src-url(+1)中有换行符,我会使用它