如何从Shell中的字符串中提取第一个字符?

时间:2017-08-07 11:22:32

标签: bash shell

我有一个字符串(以逗号分隔),我需要从中提取第一个字符'

Eg  'A - one,B - two,C - three'

预期输出

A,B,C

6 个答案:

答案 0 :(得分:1)

echo 'A - one,B - two,C - three' | awk -F ',' '{OFS = ","} {for(i=1;i<=NF; i++) {$i=substr($i,1,1) }; print $0}'

答案 1 :(得分:1)

对于大多数情况,这应该有效(ascii)

echo 'A - one,B - two,C - three' | tr ',' '\n' | cut -b1

对于基于字符的选择(例如utf),这个更适合

echo 'A - one,B - two,C - three' | tr ',' '\n' | cut -c1

答案 2 :(得分:0)

sed解决方案:

echo 'A - one,B - two,C - three' | sed 's/\(.\)[^,]*,\{0,1\}/\1,/g;s/,$//'

答案 3 :(得分:0)

这个 sed 单行应该适用于您的示例:

sed -r 's/\s-[^,]*//g

测试:

kent$  sed -r 's/\s-[^,]*//g'<<< 'A - one,B - two,C - three' 
A,B,C

如果您喜欢用 awk 解决问题:

awk -F'\\s*-[^,]*' -v OFS="" '{$1=$1}7'

将起作用:

kent$   awk -F'\\s*-[^,]*' -v OFS="" '{$1=$1}7' <<<'A - one,B - two,C - three' 
A,B,C

答案 4 :(得分:0)

我在“纯”bash中提出以下解决方案:

X='A - one,B - two,C - three'

IFS=',' read -ra A <<< "$X"
RES=''
for W in "${A[@]}" ; do
   RES+=",${W:0:1}"
done

echo ${RES:1}

答案 5 :(得分:0)

echo 'A - one,B - two,C - three'| awk '{print $1substr($3,4)substr($5,4)}'

A,B,C