在Bash shell脚本中,我处理的数据如下所示:
string1-string2-string3-string4-etc
我需要将string1
和string2
分配给唯一变量,并将string3-string4-etc
放在另一个唯一变量内。我试图设置IFS,然后string3
,string4
和etc
已断开连接。
如何获取我想要的数据?如果可能的话,我更喜欢内置shell命令,但gawk或其他工具也很好。
答案 0 :(得分:11)
使用内置read
命令:
str='string1-string2-string3-string4-etc'
IFS=- read str1 str2 the_rest <<< "$str"
答案 1 :(得分:7)
只要-
字符始终是字段分隔符并且未嵌入任何子字符串中,以下内容将起作用:
str='string1-string2-string3-string4-etc'
a=$(echo "$str" | cut -d- -f1)
b=$(echo "$str" | cut -d- -f2)
c=$(echo "$str" | cut -d- -f3-)
剪切实用程序使用短划线作为分隔符来定义要捕获的字段,Bash command substitution用于将剪切输出分配给变量。
$ echo "$a"; echo "$b"; echo "$c"
string1
string2
string3-string4-etc
答案 2 :(得分:2)
使用Bash正则表达式:
s=string1-string2-string3-string4-etc
pat="([^-]*)-([^-]*)-(.*)"
[[ $s =~ $pat ]]
echo "${BASH_REMATCH[1]}"
echo "${BASH_REMATCH[2]}"
echo "${BASH_REMATCH[3]}"
输出:
string1
string2
string3-string4-etc