【问题标题】:Shell: How to cut a single string with "Cut"?Shell:如何用“Cut”剪切单个字符串?
【发布时间】:2014-08-26 13:03:35
【问题描述】:

我正在尝试将字符串切入外壳。我想做类似的事情:

cut -d' ' -f1 "hello 12345 xyz" 

但问题是 cut 接受一个文件,所以如果我将字符串传递给它,它会尝试打开名为“hello 12345 xyz”的不存在文件,然后尝试剪切其内容

我想用基础程序解决这个问题,所以不要告诉我使用 awk

谢谢!

【问题讨论】:

    标签: bash shell sh cut io-redirection


    【解决方案1】:

    您可以在BASH 中使用Here Strings

    cut -d' ' -f1 <<< "hello 12345 xyz"
    hello
    

    【讨论】:

    • 哦,我误解了他试图从文件中删除字符串hello 12345 xyz。但你解释正确。
    【解决方案2】:

    bash 本身有几种方法可以做到这一点。如果您的字符串已经在参数中(或者您不介意将其分配给一个参数,则可以使用read

    str="hello 12345 xyz"
    read first rest <<< "$str"
    

    或参数扩展:

    echo "${str% *}"
    

    或正则表达式匹配:

    [[ "hello 12345 xyz" =~ ([^ ]+)\  ]]
    echo "${BASH_REMATCH[1]}"
    

    【讨论】:

      【解决方案3】:

      要让cut 作用于字符串而不是文件,您必须通过 STDIN 给它字符串。最常见的方法是:

      $ echo 'hello 12345 xyz' | cut -f 1
      hello
      

      【讨论】:

        【解决方案4】:

        我不完全了解您是在 shell 脚本中需要它,还是在剪切传递给脚本的参数时需要它,所以我将介绍这两个任务的解决方案。请注意,甚至不需要 cut,因为默认情况下,shell 可以使用内置的 set 执行基于空格的分词。

        如果你有字符串一个shell脚本,

         foo="hello 12345 xyz"
         set -- $foo
         echo $1    # hello
        

        如果字符串被传递作为shell脚本的第一个参数,如script "hello 12345 xyz"

         set -- $1
         echo $1
        

        【讨论】:

          猜你喜欢
          • 2011-06-01
          • 1970-01-01
          • 2011-04-14
          • 2012-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多