【问题标题】:concatenate a string to the end of every output line in bash/csh将一个字符串连接到 bash/csh 中每个输出行的末尾
【发布时间】:2011-02-08 15:58:19
【问题描述】:

在 bash 命令行中,如果我运行“find . -name 'abc*'”,它会打印出一个文件名列表,例如

abc1
abc2
abc3

如何使用 echo 或其他命令对其进行管道传输,以便获得以下输出:

abc1   ok
abc2   ok
abc3   ok

【问题讨论】:

    标签: bash string-concatenation


    【解决方案1】:
    find . -name 'abc*' | sed 's/$/\tok/' | column -t
    

    sed 将字符串 <Tab>ok 附加到每一行,column 很好地格式化输出(如果你不需要它,你可以跳过它)。

    【讨论】:

      【解决方案2】:

      我倾向于写作:

      whatever | while read line; do echo $line ok; done
      

      对于这么简单的事情来说,这可能有点过头了,但如果你想用这条线做更复杂的事情,它就会成为最简单的事情。而且它不涉及记住如何使 sed 工作!

      【讨论】:

        【解决方案3】:

        使用 GNU 查找,

        find . -name "abc*" -printf "%f ok\n"
        

        【讨论】:

        • 简单,不需要其他工具。 +1
        【解决方案4】:

        简单地说:

        $ find . -name 'abc*' | xargs -I {} echo {} OK
        

        【讨论】:

        • 和我的回答没什么不同,是吗?
        【解决方案5】:

        通过 sed 管道,是一种方式:

         | sed -e 's/\(^.*\)/\1   ok/'
        

        【讨论】:

          【解决方案6】:

          你可以使用xargs:

          find -iname "abc" | xargs -IREPL echo REPL ok
          

          【讨论】:

            【解决方案7】:

            查看paste 标准命令。或者对于 find 的每个元素,您应该手动回显文件名和该文件名上函数的结果。

            你能告诉你你最终想做什么吗?

            【讨论】:

              【解决方案8】:

              使用这样的东西:

              find . -name "abc*" -exec echo "{} - ok" \;
              

              【讨论】:

                【解决方案9】:
                find . -name 'abc*' -exec echo {}' OK' \; | column -t
                

                【讨论】:

                  猜你喜欢
                  • 2017-08-02
                  • 2018-06-16
                  • 2021-09-18
                  • 2021-10-06
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-07-20
                  • 2018-03-11
                  • 1970-01-01
                  相关资源
                  最近更新 更多