【发布时间】:2013-08-30 19:23:56
【问题描述】:
我正在尝试查找aaa 的所有实例并将其替换为bbb,但保留aaa 之前的第一个字符。下面是我在 PHP 中使用 PCRE 的方法:
preg_replace('#(.?)aaa#', '\1bbb', 'aaasdfg');
我将如何使用 sed 做类似的事情?这是我的尝试(没有成功):
sed -i.bak -r 's/(.\?)aaa/\1bbb/g' filename.ext
这是一个人为的例子。我正在尝试做的事情有点复杂,但长话短说,我正在努力让.? 工作。
有什么想法吗?
【问题讨论】:
-
aaa的第一个字符不是一直都是a吗?对于像我这样的慢人:也许您可以发布一些应该如何转换几个字符串的示例。
-
aaasdfg被转换为bbbsdfg。xaaasdf被转换为xbbbsdf。所以它不是 a 的第一个字符,而是bbb之前的任何字符。 -
我不明白。这与
sed -i.bak -r 's/aaa/bbb/g' filename.ext有何不同?我的意思是,正则表达式替换总是保留匹配字符串之前的 everything ;你不需要为此做任何特别的事情。 -
为什么首先使用 sed?你肯定在那台机器上有 perl 和 php。
-
我刚才看错了你的问题。现在我更新了我的答案,我认为你的问题应该得到解决。你被逃跑弄糊涂了……;)