代码之家  ›  专栏  ›  技术社区  ›  Greg Hewgill

如何反转文本文件的行?

  •  25
  • Greg Hewgill  · 技术社区  · 17 年前

    我正在编写一个小的shell脚本,它需要反转文本文件的行。有没有标准的filter命令来做这类事情?

    我的具体应用是,我得到了一个Git提交标识符列表,我希望以相反的顺序处理它们:

    git log --pretty=oneline work...master | grep -v DEBUG: | cut -d' ' -f1 | reverse
    

    reverse 这样地:

    ... | cat -b | sort -rn | cut -f2-
    

    cat 然后给每一行都编号 sort 要按降序数字顺序对它们进行排序(最终会反转整个文件),则 cut

    以上内容适用于我的申请,但在一般情况下可能会失败,因为 cat -b 只有非空行的数字。

    8 回复  |  直到 11 年前
        1
  •  55
  •   Vinko Vrsalovic    17 年前
        2
  •  27
  •   porg    14 年前

    标准 命令用于您的目的:

    tail -r file.txt
    

    按相反顺序打印file.txt的行!

        3
  •  23
  •   Hynek -Pichi- Vychodil Paulo Suassuna    16 年前

    tac

    编辑: 使用 sed

    sed 'x;1!H;$!d;x'
    

    甚至更长

    perl -e'print reverse<>'
    
        4
  •  2
  •   Jess Jess    17 年前


    如果这是您想要避免的唯一问题,那么为什么不使用“cat-n”对所有行进行编号呢?

        5
  •  2
  •   Gavin Brock    16 年前

    塞德 上面的示例,使用 perl -也许更令人难忘(取决于你的大脑是如何连接的):

    perl -e 'print reverse <>'
    
        6
  •  1
  •   Jonathan Leffler    17 年前
    :   "@(#)$Id: reverse.sh,v 1.2 1997/06/02 21:45:00 johnl Exp $"
    #
    #   Reverse the order of the lines in each file
    
    awk ' { printf("%d:%s\n", NR, $0);}' $* |
    sort -t: +0nr -1 |
    sed 's/^[0-9][0-9]*://'
    

    对我来说很有魅力。。。

        7
  •  1
  •   OJFord    10 年前

    在这种情况下,只需使用 --reverse

    $ git log --reverse --pretty=oneline work...master | grep -v DEBUG: | cut -d' ' -f1
    
        8
  •  0
  •   kcidkcus    10 年前
    rev <name of your text file.txt>
    

    您甚至可以这样做:

    echo <whatever you want to type>|rev
    
        9
  •  0
  •   martian    7 年前
    awk '{a[i++]=$0}END{for(;i-->0;)print a[i]}'
    

    sed

    推荐文章