Shell中如何分割字符串
使用字符替换来分割字符串
tr 或者 类似实现字符串替换的工具,如 sed。
echo "go:python:rust:js" | tr ":" "\n" # 使用 tr 将分隔符 : 替换成换行符 \n
使用 tr 将分隔符 : 替换成换行符 \n。
使用 cut 分割字符串
echo "go:python:rust:js" | cut -d ":" -f 1
echo "go:python:rust:js" | cut -d ":" -f 2
echo "go:python:rust:js" | cut -d ":" -f 3
echo "go:python:rust:js" | cut -d ":" -f 4
使用 cut 对输入字符串进行切割。如上所述,它有比较明显的缺点,需要指定哪一个列,如果输入多列,那么需要多次执行命令。不过,当字符串很短的情况下,这些差异可以忽略。
使用 awk 分割字符串
echo "go:python:rust:js" | awk -F":" 'BEGIN {OFS="\n"} {$1=$1} {print $0}'
# 或者
echo "go:python:rust:js" | awk 'BEGIN {FS=":"; OFS="\n"} {$1=$1; print $0}'
使用 awk 处理输入字符串,通过指定输入列分隔符( FS=":" )、与输出列分隔符(OFS="\n")来实现。特别需要指出,在上面的示例脚本中,{$1=$1} 是必要的,它告诉 awk 强行重新格式化行数据,不然不会有什么效果。
使用 IFS 环境变量
IFS,全称为 Internal Field Separator。
#!/bin/bash
IFS=":" read -ra aaa <<< "go:python:rust:js"
echo "${aaa[0]}, ${aaa[1]}, ${aaa[2]} ,${aaa[3]}"
echo "${aaa[@]}"
本例,使用 read 命令工具读入字符串,通过 shell 环境变量 IFS 来指定列分隔符,并将分割的各位列值赋给一个数组变量。通过操作数据,可以获得所要列的值。