我可以使用sed搜索字符串并在搜索字符串之前追加/ sub1和某些文件../

时间:2013-08-16 21:04:55

标签: linux unix replace sed

我必须查看jsp文件并查找字符串loginpage.jsp并替换为../loginPage.jsp。 我试过以下:  第一次尝试:

    sed -i -e 's/<a id="logo" href="loginPage.jsp"><span class="alt">abc</span>        </a>/<a      id="logo" href="../loginPage.jsp"><span class="alt">abc</span></a>/g' 

第二次尝试:

    SRC="'loginPage.jsp'"
    DEST="'sub2/loginPage.jsp'"
    sed -i "s/$SRC/$DEST/g" <file path>/test1.jsp

第3次尝试使用行号是文件

   var="response.sendRedirect("sub2/loginPage.jsp");"
   sed "19 s/.*/$var/" <file path>/test1.jsp

你能指导我如何实现这个目标吗? 谢谢,

3 个答案:

答案 0 :(得分:1)

由于您的输入文本也有斜杠,您应该转义输入中的所有斜杠或使用其他分隔符,例如,尝试这些:

sed 's#<....>#replacement#g' file

sed -i "s#$SRC#$DEST#g" <file path>/test1.jsp

答案 1 :(得分:1)

据我所知,你的主要问题是在sed命令中使用/作为分隔符。 在sed中你几乎可以使用任何角色,所以 sed“s-aa-bb - ”工作正常。在你的情况下,因为替换有一个/ sed本身会受到限制,而其余的字符串都不会被解析。

来自sed的手册:

  

\ <强> C 的regexp <强> C

         Match lines matching the regular expression regexp.  The  c  may  be  any
         character

答案 2 :(得分:0)

除了Kent和chapuzzo提到的分隔符问题, 我怀疑你引用的方式也可能是问题所在。 如果您正在使用'sed'版本,则特别相关 这与我们都在使用的不一样。

这种简单的方法对我有用(Ubuntu,标准gnu sed):

% cat foo3
<a id="logo" href="loginPage.jsp"><span class="alt">abc</span>
% sed -e 's=loginPage.jsp=sub2/loginPage.jsp=' < foo3
<a id="logo" href="sub2/loginPage.jsp"><span class="alt">abc</span>
% sed --ver
GNU sed version 4.2.1

还有一个PS,不清楚你为什么使用-i flag,它可能会 不要做你的想法/期望。