0

我必须查看 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

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

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

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

4

3 回答 3

1

由于您的输入文本也有斜线,您应该转义输入中的所有斜线或使用另一个分隔符,例如,试试这些:

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

或者

sed -i "s#$SRC#$DEST#g" <file path>/test1.jsp
于 2013-08-16T21:13:03.397 回答
1

据我所知,您的主要问题是在 sed 命令中使用 / 作为分隔符。在 sed 中,您几乎可以使用任何字符来达到此目的,因此sed "s-aa-bb-"可以正常工作。在您的情况下,由于替换具有 / sed 本身会感到困惑,并且不会解析字符串的其余部分。

来自 sed 的手册:

\ c正则表达式c

         Match lines matching the regular expression regexp.  The  c  may  be  any
         character
于 2013-08-16T21:15:22.470 回答
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 标志,它可能没有按照你的想法/期望做。

于 2013-08-16T21:29:06.247 回答