Shell:如何使用" Cut&#34 ;?剪切单个字符串?

时间:2014-07-05 13:42:10

标签: bash shell sh cut io-redirection

我正在尝试将一个字符串剪切到shell中。我想做点什么:

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

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

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

谢谢!

4 个答案:

答案 0 :(得分:9)

您可以在Here Strings中使用BASH

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

答案 1 :(得分:2)

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

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

或参数扩展:

echo "${str% *}"

或正则表达式匹配:

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

答案 2 :(得分:1)

要让cut对字符串而不是文件进行操作,您必须通过STDIN为其提供字符串。最常见的方法是:

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

答案 3 :(得分:0)

我不完全理解你是否需要在shell脚本中使用它,或者在切断传递给脚本的参数时,所以我将为这两个任务提供解决方案。请注意,甚至不需要cut,因为shell可以默认使用内置set来基于空格执行分词。

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

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

如果字符串是传递作为shell脚本的第一个参数,就像在script "hello 12345 xyz"中一样,

 set -- $1
 echo $1