【问题标题】:How to use perl one-liner as an alias如何使用 perl one-liner 作为别名
【发布时间】:2013-09-02 18:59:50
【问题描述】:

要过滤不连续的文件行,下面的单行工作正常:

cat filename | perl -ane 'print unless $a{$_}++'

但是,当我尝试将其设为别名并进行操作时,它无法按预期工作

alias uniqlines " cat \!* | perl -ane 'print unless \$a{\$_}++' "

报错如下

   a: Undefined variable.

在 SunOS 操作系统中使用 tcsh shell

【问题讨论】:

  • 您知道uniq 命令吗?
  • Uniq 仅适用于连续行,对吗?

标签: perl shell solaris tcsh uniq


【解决方案1】:

在 bash 中这种语法有效:

alias uniqlines="perl -ane 'print unless \$a{\$_}++' "

这是一种在 tcsh 中似乎也有效的方法:

alias uniqlines 'perl -ane '"'"'print unless $a{$_}++'"'"' '

【讨论】:

  • 删除无用的cat {} |.
  • 我正在使用 SunOS tcsh,但它仍然不适合我,得到同样的错误
  • 阅读本文以了解 tcsh 别名中的引号问题:engtech.wordpress.com/2006/05/25/…
【解决方案2】:

您想改用函数:

uniqlines(){ cat "$@" | perl -ane 'print unless $a{$_}++'; }

但这只是一种花哨的说法:

alias uniqlines=uniq

【讨论】:

  • 即使这不是您要求的解决方案,我建议您只使用“uniq”。它做你想做的事。
  • uniq 命令是只过滤连续的重复行,它对过滤掉不连续的重复行没有帮助,所以我这里要 perl
  • “sort -u 文件名”怎么样?它比您的别名(排序)多一点,但会过滤掉不连续的相等行。
  • 正确!!但我不想打扰文件(行)顺序
猜你喜欢
  • 2016-11-22
  • 2018-05-08
  • 2014-05-08
  • 2014-03-19
  • 1970-01-01
  • 2014-07-31
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多