我正在尝试将一个字符串剪切到shell中。我想做点什么:
cut -d' ' -f1 "hello 12345 xyz"
但问题是cut接受一个文件,所以如果我将字符串传递给它,它会尝试打开名为“hello 12345 xyz”的不存在文件,然后尝试剪切其内容
我想用基本程序解决这个问题,所以不要告诉我使用awk
谢谢!
答案 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