Regex 在bash中搜索并替换字符串中的子字符串
我有以下任务: 我必须替换几个链接,但只替换以结尾的链接。要吗 重要提示:文件中还有其他链接,但它们应该保持不变Regex 在bash中搜索并替换字符串中的子字符串,regex,bash,sed,Regex,Bash,Sed,我有以下任务: 我必须替换几个链接,但只替换以结尾的链接。要吗 重要提示:文件中还有其他链接,但它们应该保持不变 <li><a href="MeinKonto.do">Einstellungen verwalten</a></li> 到 因此,我必须搜索与的链接。做,采取之前的一部分,并记住它,例如$a,替换为整个链接 <s:url action=' '/> 报价之间超过$a 我考虑过sed,但据我所知,sed只搜索整个
<li><a href="MeinKonto.do">Einstellungen verwalten</a></li>
到
因此,我必须搜索与的链接。做,采取之前的一部分,并记住它,例如$a,替换为整个链接
<s:url action=' '/>
报价之间超过$a
我考虑过sed,但据我所知,sed只搜索整个字符串并替换它。
我还尝试将bash参数扩展与sed结合使用,但在引号和变量方面遇到了严重问题
cat ./src/main/webapp/include/stoBox2.jsp | grep -e '<a href=".*\.do">' | while read a;
do
b=${a#*href=\"};
c=${b%.do*};
sed -i 's/href=\"$a.do\"/href=\"<s:url action=\'$a\'/>\"/g' ./src/main/webapp/include/stoBox2.jsp;
done;
cat./src/main/webapp/include/stoBox2.jsp | grep-e“”|同时阅读a;
做
b=${a}*href=\“};
c=${b%.do*};
sed-i的/href=\“$a.do\”/href=\“\”/g./src/main/webapp/include/stoBox2.jsp;
完成;
有什么想法吗
非常感谢。试试这个:
sed -i "s%\(href=\"\)\([^\"]\+\)\.do%\1<s:url action='\2'/>%g" \
./src/main/webapp/include/stoBox2.jsp;
sed-i“s%\(href=\“\)\([^\“]\+\)\.do%\1%g”\
./src/main/webapp/include/stoBox2.jsp;
您可以使用括号(\(,\)
)捕获模式,并在替换模式中使用它。在这里,我捕获一个不带任何
“
但在之前的字符串。do
(\([^\“]\+\)\.do
),并插入它,但不带.do
后缀(\2
)
第二个模式中有一个/
,因此我使用%
s来分隔表达式,而不是传统的/
sed -i sed 's#href="\(.*\)\.do"#href="<s:url action='"'\1'"'/>"#g' ./src/main/webapp/include/stoBox2.jsp
参数
-i
用于直接修改您的文件。如果您不想这样做,只需将其删除。然后使用-tmp
将结果保存到tmp文件中,您的链接是否总是用双引号括起来?如果您在同一行上有多个链接,并且其中一个链接(第一个除外)是。要修改,请执行gex将删除链接(sed
贪婪,你的括号尽可能多)。无意冒犯,但我的解决方案有什么问题,让你发布了几乎相同的内容?@qole你检查过你的命令了吗?它只是遗漏了一些双引号或单引号。我想这里有\1表示href=”
有点多余。href=“
这件事对我来说并不多余,但还行。对于引号,是的,我检查了我的命令,对于OP的示例,它提供了所需的输出。你能提供更多的细节吗?您是否按照我的第一条评论中所述的输入尝试了您的命令?@qole是的,您在第一条评论中是对的,我应该添加一个[^\“]
来避免它。对于您的命令,我刚刚遇到了错误,即不匹配。“
我没有遇到此错误。如果您仍然拥有您键入的确切命令,或者您(或任何其他人)曾经复制过它,我很感兴趣。
sed -i sed 's#href="\(.*\)\.do"#href="<s:url action='"'\1'"'/>"#g' ./src/main/webapp/include/stoBox2.jsp
's#href="\(.*\)\.do"#href="<s:url action='
"'\1'"
'/>"#g'