2017-10-19 90 views
-1

我有这样的bash/awk的代码来处理主机如何替换,只是喜欢在AWK

$ echo 'the.pattern to change' | awk '{sub(/the./,"")}{print $1}' 
pattern 

我需要通过Perl来代替AWK在Perl打印列。 任何想法如何用perl oneliner替换声明的第二部分?

+2

为什么你需要用Perl来代替AWK? – 123

回答

-1

您可以使用带分隔功能的Perl一行。

我们需要使用the.space来分割字符。所以你可以在分割函数中使用RegEx。

echo 'the.pattern to change' | perl -aF"/the\.|\s/" -ne 'print $F[1],"\n";' 

-a自动拆分模式

echo 'the.pattern to change' | perl -ane '$F[0]=~s/the\.//; print $F[0],"\n";' 
+0

@downvoter添加评论 – mkHun

+0

这与您可以通过Perl访问'awk'的方式非常接近。我也不明白downvote。 – reinierpost

+1

@reinierpost我低估了,因为它根本不会做同样的事情。达到相同的结果并不意味着命令执行相同的操作。 OP不分割'the.'上的字段,它的工作方式与awk命令完全不同。 awk等于这个将是'awk -F'the \。| \ s''{print $ 1}''。对OP更接近的perl命令将是'perl -l's/the \ .//; print +(split/\ s + /)[0]' – 123

1

如何:

echo 'the.pattern to change' | perl -aE '$F[0] =~ s/the\.//; say $F[0]' 

输出:

pattern 
+0

您错过了'-n' – mkHun

+0

@mkHun:'-n'在周围添加了一个while循环代码,在这种情况下它不是强制性的,输入中只有一个字符串。但如果我们必须处理文件,那么你是对的。 – Toto

+0

我已经执行了你的命令,但没有给出任何结果。因为我们没有传递数据。如果我添加-n开关,它会给出结果。 – mkHun

0

还有一个方法:

echo 'the.pattern to change' | perl -lpe 's/the\.//;$_=(/[^ ]+/g)[0];'

command execution example