如何修改匹配的模式

时间:2016-07-24 11:08:14

标签: perl sed

只是想知道是否有一种方便的方法来修改Perl one liner中的匹配模式变量。例如,在字符串#include <iostream> #include <sstream> int main() { std::stringstream ss; int mac[] = {208,181,194,193,114,219}; for (unsigned i = 0; i < sizeof mac / sizeof mac[0]; ++i) ss << mac [i]; int result; ss >> result; std::cout << result; //208181194193114219 } 中,我想使用如下命令将abcdef替换为def(输出abce):

e

使用此类功能执行各种格式化任务会很容易。我们可以在sed中这样做吗?

1 个答案:

答案 0 :(得分:1)

在Perl中使用/e标志很容易:

echo 'abcdef' | perl -pe 's/(def)/substr $1, 1, -1/e'

e告诉perl将替换部分解析为代码块,而不是字符串。你可以在那里放任意代码。

但你的具体任务(修剪第一个和最后一个角色)也可以这样做:

echo 'abcdef' | perl -pe 's/d(e)f/$1/'

(此外,perl -p已隐含-n。无需同时指定两者。)