Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何修改匹配的模式_Perl_Sed - Fatal编程技术网

Perl 如何修改匹配的模式

Perl 如何修改匹配的模式,perl,sed,Perl,Sed,只是想知道在Perl one liner中是否有一种方便的方法来修改匹配的模式变量。例如,在字符串abcdef中,我想使用如下命令将def替换为e(输出abce): echo "abcdef" | perl -pne 's/(def)/{command that trims first and last character of $1 and returns it as a string for perl to use it as a replacement}/' 使用这样的功能来执行各种格式

只是想知道在Perl one liner中是否有一种方便的方法来修改匹配的模式变量。例如,在字符串
abcdef
中,我想使用如下命令将
def
替换为
e
(输出abce):

echo "abcdef" | perl -pne 's/(def)/{command that trims first and last character of $1 and returns it as a string for perl to use it as a replacement}/'

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

这在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
。不需要同时指定两者。)

如果您的整个问题描述都是关于perl的,为什么要询问sed?