在 Unix 中拆分文本



我正在编写一个简单的脚本,该脚本使用以下代码拆分一个包含一些文本的变量:

#!/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。请让我知道我哪里做错了?

要计算命令并将其存储到变量中,请使用 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

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

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

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

$ SAMPLE_TEXT="hello world.this is.a test string"
$ IFS=. read -ra words <<< "$SAMPLE_TEXT" 
$ printf "%sn" "${words[@]}"
hello world
this is
a test string
$ for idx in "${!words[@]}"; do printf "%dt%sn" $idx "${words[idx]}"; done
0   hello world
1   this is
2   a test string

相关内容

  • 没有找到相关文章

最新更新