使用sed和regex搜索到下一个字符
我得到了一个带有URL的图像,如:使用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=
我使用的是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)中有换行符,我会使用它