如何获取空格后的单个字符?

如何获取空格后的单个字符?

我怎样才能得到低于输出?我想要第一个字段保持原样,并在空格后添加一个字符。

echo "Hello world"
Hellow

如果它还有第三个字段,则第三个字段的起始字符应该出现在输出中。

echo "hello world unix"
hellou

答案1

使用 sed:

编辑:改进为格伦·杰克曼, 谢谢!

$ 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+)第一组,一个或多个非空格字符:“hello”
  • .*中间部分,任意字符:“world”
  • \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”

答案2

用于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

答案3

使用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

相关内容