3

我是管理许多网站的轮换团队的一员,我们为一个正在完全重新设计的网站继承了一些特别糟糕的代码。可怕的是,开发服务器上有一些链接会引导你到实时服务器和旧域以及许多其他可怕的、可怕的事情。

我一直在尝试编写一个 grep/sed 命令,用我们现在在网站上使用的用户定义的 php 函数 full_link 替换所有这些链接,以防止所有链接到不同的地方。所以(为我们的域使用占位符)而不是http://www.place.com/foo/barwrite ,你会写<?php echo full_link('foo/bar'); ?>,当我们将它从一台服务器移动到另一台服务器时它会起作用。

这是我得到的:

grep -v 'echo' * -r -P | grep "(?<=<a href=['\"])(http:\/\/foo\.bar\.net\/|10\.41\.6\.118\/|http:\/\/foo2\.bar\.net\/)([^<]*?)(?=['\"])" -P | sed -r "s@(?<=<a href=['\"])(http://foo\.bar\.net/|10\.41\.6\.118/|http://foo2\.bar\.net/)([^<]*?)(?=['\"])@<?php echo full_link('\2'); ?>@gpw output"

(如果您想知道第一个 grep 或[^<],它们都只是一个基本的尝试,以防止将 php 标签放入现有的 php 标签中。因为这只是使手动编辑减少复制粘贴链接和被重定向到错误的服务器,它不需要是完美的,但我愿意接受更好的方法来做到这一点。)

我已经让 grep 语句正常工作并获得了我希望它们得到的东西,但是当我将 sed 添加到末尾时,会发生这种情况:

sed: -e expression #1, char 159: Invalid preceding regular expression

从我所做的研究来看,似乎我可能在我的 sed 语句中错误地转义了某些内容,并且我尝试了很多事情,但它只给了我指向最后几个字符之一的相同消息表达。

4

1 回答 1

1
sed "s.http://[^/]*/.<?php echo full_link('.;s/$/'); ?>/"
  • 寻找http://[^/]*/
  • 用。。。来代替<?php echo full_link('
  • 寻找$
  • 用。。。来代替'); ?>
于 2013-04-26T02:03:26.500 回答