在Unix中拆分文本

时间:2014-02-26 14:49:43

标签: bash unix cut

我正在编写一个简单的脚本,通过使用下面的代码来分割包含某些文本的变量:

#!/bin/sh

SAMPLE_TEXT=hello.world.testing

echo $SAMPLE_TEXT
OUT_VALUE=$SAMPLE_TEXT | cut -d'.' -f1

echo output is $OUT_VALUE

我希望输出为output is hello,但是当我运行此程序时,我的输出为output is。请让我知道我在哪里做错了?

3 个答案:

答案 0 :(得分:4)

要评估命令并将其存储到变量中,请使用var=$(command)

总之,你的代码就像这样:

SAMPLE_TEXT="hello.world.testing"

echo "$SAMPLE_TEXT"
OUT_VALUE=$(echo "$SAMPLE_TEXT" | cut -d'.' -f1)
# OUT_VALUE=$(cut -d'.' -f1 <<< "$SAMPLE_TEXT") <--- alternatively

echo "output is $OUT_VALUE"

另外,请注意我在附近添加引号。这是一个很好的做法,可以帮助你。


其他方法:

$ sed -r 's/([^\.]*).*/\1/g' <<< "$SAMPLE_TEXT"
hello

$ awk -F. '{print $1}' <<< "$SAMPLE_TEXT"
hello

$ echo "${SAMPLE_TEXT%%.*}"
hello

答案 1 :(得分:4)

fedorqui的答案是正确的答案。只是添加另一种方法......

$ SAMPLE_TEXT=hello.world.testing
$ IFS=. read OUT_VALUE _ <<< "$SAMPLE_TEXT"
$ echo output is $OUT_VALUE 
output is hello

答案 2 :(得分:2)

只是为了扩展@ anishane对自己答案的评论:

$ SAMPLE_TEXT="hello world.this is.a test string"
$ IFS=. read -ra words <<< "$SAMPLE_TEXT" 

$ printf "%s\n" "${words[@]}"
hello world
this is
a test string

$ for idx in "${!words[@]}"; do printf "%d\t%s\n" $idx "${words[idx]}"; done
0   hello world
1   this is
2   a test string