只是想知道是否有一种方便的方法来修改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中这样做吗?
答案 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
。无需同时指定两者。)