切片由一个表达式中的函数返回的列表

时间:2014-05-16 01:17:33

标签: perl bash

我正在玩一个问题的解决方案,我想出了这个解决方案:

echo "hell-hello-helloo" | perl -e '@a=split(/\-/, <>);print join("-",@a[0,1]);'

它应该提取前两个标记并删除其余部分。

如果我能够以某种方式将第一个分裂移动到连接中并将其作为一个可怕的线路噪声进行操作,那么我的答案会更冷,更难以阅读且难以维护。

我尝试了一些东西,但我不知道该怎么做。我想要达到的是这样的:

echo "hell-hello-helloo" | perl -e 'print join("-",@{split(/\-/,<>)}[0,1]);'

2 个答案:

答案 0 :(得分:1)

使用perl one liner

echo "hell-hello-helloo" | perl -F/-/ -ane 'print join("-",@F[0,1]);'

或者,如果您不喜欢自动分割的-F选项,则可以使用以下两种方法之一:

echo "hell-hello-helloo" | perl -e 'print join "-", (split /-/, <>)[0,1]'
echo "hell-hello-helloo" | perl -pe '$_ = join "-", (split /-/)[0,1]'

答案 1 :(得分:0)

您可以使用正则表达式

非常简洁地完成此操作
echo "hell-hello-helloo" | perl -ne "print /([^-]+-[^-]+)/"