如何用POSIX sh将字符串拆分为两个?

时间:2014-01-04 13:51:22

标签: string shell split posix

我想将一个字符串变量分成两部分。该字符串的格式为:

mingw32mingw32
linux64mingw32
mac64mingw64

我想离开:

mingw32 mingw32
linux64 mingw32
mac64   mingw64

我知道cut,但我觉得这太简单了。我也可以手动完成(实际上只有五六种变体),但我觉得有更好的方法。我只是不太精通shell工具。

注意我希望这在POSIX sh中工作以获得最大兼容性,因此没有GNU或Bash-isms。

3 个答案:

答案 0 :(得分:2)

你可以使用POSIX shell变量替换,但它有点乱。要获得数字后跟字母的尾部:

tail=${var#*[0-9][a-z]}

这获得了几乎正确的尾部,即ingw32之类的东西。要解决这个问题,请通过修剪一个字符和尾部来获取头部:

head=${var%?$tail}

现在正确的尾部是头部修剪的值:

tail=${var#$head}

答案 1 :(得分:0)

你可以使用sed

来完成
sed 's/\([0-9]\)\([a-z]\)/\1\t\2/' file

sed 's/\([0-9]\+\)/\1\t/' file

如果第二列的宽度始终为7

sed 's/\(.......\)$/\t\1/' file

sed 's/\(.\{7\}\)$/\t\1/' file

答案 2 :(得分:0)

使用gnu awk:

gawk '{print gensub(/([0-9]+)/, "\\1 ", 1)}' file
mingw32 mingw32
linux64 mingw32
mac64 mingw64

或者你可以使用egrep:

egrep -o '[A-Za-z]+[0-9]+' file
mingw32
mingw32
linux64
mingw32
mac64
mingw64