【问题标题】:What is a unix command for deleting the first N characters of a line?什么是删除一行前 N 个字符的 unix 命令?
【发布时间】:2010-11-01 14:16:31
【问题描述】:

例如,我可能想:

tail -f logfile | grep org.springframework | <command to remove first N characters>

我在想tr 可能有能力做到这一点,但我不确定。

【问题讨论】:

    标签: bash unix command truncate


    【解决方案1】:
    tail -f logfile | grep org.springframework | cut -c 900-
    

    将删除前 900 个字符

    cut 使用 900- 显示第 900 个字符到行尾

    但是,当我通过 grep 管道所有这些时,我什么也得不到

    【讨论】:

    • "cut -c 1-900" 不会“删除前 900 个字符”——它只会留下前 900 个字符。如果要删除前 900 个字符,请使用“cut -c 901-”
    • 根据@iammichael 的回答,它也是每行的前 900 个字符
    • 'cut -c 900-" 会删除前 899 个字符,不是吗?
    【解决方案2】:

    使用cut。例如。去除每行的前 4 个字符(即从第 5 个字符开始):

    tail -f logfile | grep org.springframework | cut -c 5-
    

    【讨论】:

    • 你知道为什么管道不工作吗?当我基本上运行该命令时,'cut' 不会将结果打印到标准输出......如果我只是运行'tail -f logfile | cut -c 5-' 我可以看到结果...问题一定是 grep 我正在使用 cygwin 仅供参考,谢谢
    • 如果不添加最后一个管道并切割会发生什么?基本上,如果您删除该行的最后一部分?
    • 当我将管道添加到“剪切”时,它会“跟踪”日志文件,使用 grep 对其进行过滤(即,所有带有“org.springframework”的行都打印到标准输出)。 .它挂了但是,如果我消除'grep''cut'正常工作......我认为我使用grep的方式有问题......也可能是cygwin的事情
    • 哦,我明白了...你为什么使用 tail ?只需执行 grep org.springframework 日志文件 | cut -c 5- 但我认为 sed 更好:-)
    • 问题是,grep 在将大块发送到剪切之前正在缓冲它们,因为它可以看到它没有写入终端。使用grep --line-buffered "org.springframework 解决该问题。
    【解决方案3】:
    sed 's/^.\{5\}//' logfile 
    

    然后将 5 替换为所需的数字...应该可以解决问题...

    编辑 如果对于每一行 sed 's/^.\{5\}//g' logfile

    【讨论】:

      【解决方案4】:

      你可以使用cut

      cut -c N- file.txt > new_file.txt
      

      -c: 个字符

      file.txt:输入文件

      new_file.txt: 输出文件

      N-:从N到end的字符被剪切并输出到新文件中。

      还可以有其他参数,如:'N'、'N-M'、'-M'分别表示第n个字符、第n个到第m个字符、第一个到第m个字符。

      这将对输入文件的每一行执行操作。

      【讨论】:

        【解决方案5】:

        我认为awk 将是最好的工具,因为它可以过滤并在过滤后的行上执行必要的字符串操作功能:

        tail -f logfile | awk '/org.springframework/ {print substr($0, 6)}'
        

        tail -f logfile | awk '/org.springframework/ && sub(/^.{5}/,"",$0)'
        

        【讨论】:

          【解决方案6】:

          这是一个简单的函数,在 bash 中测试过。函数的第一个参数是字符串,第二个参数是要剥离的字符数

          function stringStripNCharsFromStart { echo ${1:$2:${#1}} }

          用法:

          【讨论】:

          • 您可以将其简化为 echo ${1:$2}
          猜你喜欢
          • 1970-01-01
          • 2022-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-27
          • 1970-01-01
          • 2019-03-20
          相关资源
          最近更新 更多