【问题标题】:Using sed, how do you print the first 'N' characters of a line?使用 sed,如何打印一行的前 'N' 个字符?
【发布时间】:2010-10-07 00:33:14
【问题描述】:

使用sed 什么是单行来打印前n 个字符?我正在执行以下操作:

grep -G 'defn -test.*' OctaneFullTest.clj  | sed ....

【问题讨论】:

    标签: shell sed grep


    【解决方案1】:

    不要使用sed,使用cut

    grep .... | cut -c 1-N
    

    如果您必须使用sed

    grep ... | sed -e 's/^\(.\{12\}\).*/\1/'
    

    【讨论】:

    • 实际上在我现在正在使用的 Cygwin 系统上,cut 不会削减它,而 sed 会。
    • 甚至sed -r 's/^(.{12}).*/\1/'
    • @fedorqui -r 显然在 Linux 上可用,但在 Mac 上不可用。
    • 没错,它在 OSX 上不可用。
    • 仅供参考:cut -c 1-N(其中 N 是数字)是否适用于我的 Cygwin 安装(cygwin v. 2.6,cut v. 8.25)在 OS X 上,使用 @ 987654331@而不是sed -r,在别处使用。
    【解决方案2】:

    严格使用 sed:

    grep ... | sed -e 's/^\(.\{N\}\).*$/\1/'
    

    【讨论】:

      【解决方案3】:

      也不必使用 grep

      一个例子:

      sed -n '/searchwords/{s/^\(.\{12\}\).*/\1/g;p}' file
      

      【讨论】:

        【解决方案4】:
        colrm x
        

        例如,如果您需要前 100 个字符:

        cat file |colrm 101 
        

        它已经存在多年并且在大多数 linux 和 bsd 中(当然是 freebsd),通常是默认的。我不记得曾经输入过apt-get install colrm

        【讨论】:

        • 这不会给出前 50n 个字符。它为每行文本提供 n 个字符
        • colrm 理解utf8。
        【解决方案5】:

        要打印前 N 个字符,您可以删除直到行尾的 N+1 个字符:

        $ sed 's/.//5g' <<< "defn-test"
        defn
        

        【讨论】:

          【解决方案6】:

          怎么样?

          echo alonglineoftext | head -c 9
          

          【讨论】:

            猜你喜欢
            • 2018-07-07
            • 2022-12-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-09
            • 1970-01-01
            • 1970-01-01
            • 2015-02-15
            相关资源
            最近更新 更多