【问题标题】:how to substitute and print column in perl just like in awk如何在 perl 中替换和打印列,就像在 awk 中一样
【发布时间】:2018-03-31 04:21:53
【问题描述】:

我有这个 bash/awk 代码来处理主机

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

我需要用 perl 替换 awk。 知道如何用 perl oneliner 替换语句的第二部分吗?

【问题讨论】:

  • 为什么要用perl代替awk?

标签: bash perl awk replace substitution


【解决方案1】:

您可以使用带有拆分功能的 Perl one liner。

我们需要使用the.space 分割字符。所以你可以在 split 函数中使用 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";'

【讨论】:

  • 这与使用 Perl 可以达到的awk 最接近。我也不明白反对票。
  • @reinierpost 我投了反对票,因为它根本没有做同样的事情。实现相同的结果并不意味着命令执行相同的操作。 OP 不会拆分 the. 上的字段,它的工作方式与 awk 命令完全不同。 awk -F'the\.|\s' '{print $1}' 相当于 awk。更接近 OP 的 perl 命令是 perl -lne 's/the\.//;print +(split /\s+/)[0]'
  • @123 看看我以前的编辑。首先,我发布了您在评论中提到的内容(不完全是)。然后我为相同的结果给出了另一种解决方案。
  • @mkHun:用正确的解决方案替换这两种解决方案可能更好,即在未拆分的字符串中替换然后打印第一个字段
【解决方案2】:

怎么样:

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

输出:

pattern

【讨论】:

  • 你错过了-n
  • @mkHun: -n 在代码周围添加了一个while循环,在这种情况下它不是强制性的,输入中只有一个字符串。但是如果我们必须处理一个文件,你是对的。
  • 我已经执行了您的行,但没有给出任何结果。因为我们没有传递数据。如果我添加了 -n 开关,它会给出结果。
【解决方案3】:

另一种方式:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多