【问题标题】:Is there any equivalent command grep -nP "\t" some_file , using sed or awk是否有任何等效的命令 grep -nP "\t" some_file ,使用 sed 或 awk
【发布时间】:2012-10-02 21:38:22
【问题描述】:

我正在尝试在文件 some_file 中查找选项卡的出现并打印带有前导行号的那些行。 grep -nP "\t" some_file 对我来说效果很好,但我想要 sed 或 awk 等效命令。

【问题讨论】:

    标签: linux file sed awk grep


    【解决方案1】:

    好吧,你总是可以在 sed 中做到这一点:

    cat -n test.txt | sed -n "/\t/p"
    

    不幸的是,sed 只能用新的一行将行号打印到 stdout,所以无论如何,需要多个命令。上面的一个更冗长(不必要的)版本,但一个只使用 sed,将是:

    sed = test.txt | sed -n "N;s/\n/ /;/\t/p"
    

    但我更喜欢cat 的那个。猫真好。

    【讨论】:

    • Thanx 但它不会在输出中打印行号。我在 Ubuntu 终端中尝试过这样的 - sed -n "/\t/p" tab.txt
    • 是的,没错,我的错。您可以使用 cat -n 在行前加上数字。
    【解决方案2】:

    模仿:grep -nP "\t" file.txt

    这是使用GNU awk的一种方式:

    awk '/\t/ { print NR ":" $0 }' file.txt
    

    这是使用GNU sed的一种方式:

    < file.txt sed -n '/\t/{ =;p }' | sed '{ N;s/\n/:/ }'
    

    【讨论】:

    • 谢谢这就是我想要的。你能告诉我从哪里可以更有效地了解使用 awk 和 GNU sed 和正则表达式进行此类文件处理的更多信息吗?
    • @Akinza:这是一个棘手的问题。如果您看到awkman page,您可能想阅读“模式和动作”和“字符串函数”。至于sed,我喜欢this 教程。否则,我听说StackOverflow 是一个值得学习的好网站:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 2010-09-10
    • 2017-09-08
    • 1970-01-01
    • 2012-12-15
    • 2016-09-21
    相关资源
    最近更新 更多