BDN Asked: 2019-04-14 20:45:20 +0800 CST2019-04-14 20:45:20 +0800 CST 2019-04-14 20:45:20 +0800 CST 如何在空格后获得单个字符? 772 我怎样才能得到低于输出?我想要第一个字段原样和空格后的单个字符。 echo "Hello world" Hellow 如果它也有第三个字段,那么第三个字段的开始字符应该在输出中。 echo "hello world unix" hellou linux awk 3 个回答 Voted Freddy 2019-04-14T21:31:21+08:002019-04-14T21:31:21+08:00 使用 sed: 编辑:由glenn jackmann改进,谢谢! $ echo "Hello world" | sed -E 's/(\S+).*\s(\S).*$/\1\2/' Hellow $ echo "hello world unix" | sed -E 's/(\S+).*\s(\S).*$/\1\2/' hellou 以“hello world unix”为例进行说明: s/替换以下模式 (\S+)第一组,一个或多个非空格字符:“你好” .*中间部分,任意字符:“世界” \s空格字符:“” (\S)第二组,非空格字符:“u” .*$直到最后的任何字符:“nix” /\1\2/替换为第一组和第二组:“hellou” 使用 bash: $ var="Hello world" $ var_end=${var##* };echo ${var%% *}${var_end:0:1} Hellow $ var="hello world unix" $ var_end=${var##* };echo ${var%% *}${var_end:0:1} hellou 以“hello world unix”为例进行说明: var_end=${var##* }删除匹配前缀模式,最长匹配, “hello world”,结果:“unix” ${var%% *}删除匹配的后缀模式,最长匹配, “world unix”,结果:“hello” ${var_end:0:1}获取第一个字符:“u” Best Answer Kusalananda 2019-04-14T22:29:03+08:002019-04-14T22:29:03+08:00 用于输出与最后一个以awk空格分隔的单词的第一个字符连接的第一个以空格分隔的单词: awk '{ print $1 substr($NF, 1, 1) }' 该substr()函数从字符串的给定位置返回多个字符,并且$1和$NF分别是当前行上的第一个和最后一个以空格分隔的单词。 测试: $ echo 'hello world' | awk '{ print $1 substr($NF, 1, 1) }' hellow $ echo 'apple beet carrot' | awk '{ print $1 substr($NF, 1, 1) }' applec glenn jackman 2019-04-15T04:05:52+08:002019-04-15T04:05:52+08:00 使用 bash: text="hello world unix" if [[ $text =~ ^([^[:space:]]+).*[[:space:]]([^[:space:]]) ]]; then declare -p BASH_REMATCH echo "${BASH_REMATCH[1]}${BASH_REMATCH[2]}" fi declare -ar BASH_REMATCH='([0]="hello world u" [1]="hello" [2]="u")' hellou
使用 sed:
编辑:由glenn jackmann改进,谢谢!
以“hello world unix”为例进行说明:
s/
替换以下模式(\S+)
第一组,一个或多个非空格字符:“你好”.*
中间部分,任意字符:“世界”\s
空格字符:“”(\S)
第二组,非空格字符:“u”.*$
直到最后的任何字符:“nix”/\1\2/
替换为第一组和第二组:“hellou”使用 bash:
以“hello world unix”为例进行说明:
var_end=${var##* }
删除匹配前缀模式,最长匹配,“hello world”,结果:“unix”
${var%% *}
删除匹配的后缀模式,最长匹配,“world unix”,结果:“hello”
${var_end:0:1}
获取第一个字符:“u”用于输出与最后一个以
awk
空格分隔的单词的第一个字符连接的第一个以空格分隔的单词:该
substr()
函数从字符串的给定位置返回多个字符,并且$1
和$NF
分别是当前行上的第一个和最后一个以空格分隔的单词。测试:
使用 bash: