如何解析/捕获由破折号分隔的字符串?

Gre*_*egg 4 string bash parsing field variable-assignment

在Bash shell脚本中,我正在处理以这样的方式开始的数据:

string1-string2-string3-string4-etc
Run Code Online (Sandbox Code Playgroud)

我需要string1string2分配给唯一变量,并将string3-string4-etc另一个唯一变量放在一起.我试图设置IFS但随后发挥各地string3,string4以及etc为断开.

我怎样才能获得我想要的数据?如果可能的话,我更喜欢内置shell命令,但gawk或其他工具也很好.

che*_*ner 12

使用内置read命令:

str='string1-string2-string3-string4-etc'
IFS=- read str1 str2 the_rest <<< "$str"
Run Code Online (Sandbox Code Playgroud)


Tod*_*obs 9

使用剪切和命令替换来捕获字段

只要-字符始终是字段分隔符并且未嵌入任何子字符串中,以下内容将起作用:

str='string1-string2-string3-string4-etc'
a=$(echo "$str" | cut -d- -f1)
b=$(echo "$str" | cut -d- -f2)
c=$(echo "$str" | cut -d- -f3-)
Run Code Online (Sandbox Code Playgroud)

cut实用程序执行使用短划线作为分隔符来定义要捕获的字段的工作,并使用Bash 命令替换将cut的输出分配给变量.

验证

$ echo "$a"; echo "$b"; echo "$c"
string1
string2
string3-string4-etc
Run Code Online (Sandbox Code Playgroud)