我想将一个字符串变量分成两部分。该字符串的格式为:
mingw32mingw32
linux64mingw32
mac64mingw64
我想离开:
mingw32 mingw32
linux64 mingw32
mac64 mingw64
我知道cut
,但我觉得这太简单了。我也可以手动完成(实际上只有五六种变体),但我觉得有更好的方法。我只是不太精通shell工具。
注意我希望这在POSIX sh中工作以获得最大兼容性,因此没有GNU或Bash-isms。
答案 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