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