どうすれば出力を下回ることができますか?最初のフィールドをそのままにして、スペースの後の1文字が必要です。
echo "Hello world"
Hellow
3番目のフィールドもある場合は、3番目のフィールドの最初の文字が出力に含まれている必要があります。
echo "hello world unix"
hellou
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
_
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
例として「helloworldunix」を使用した説明:
s/
次のパターンに置き換えます(\S+)
1番目のグループ、1つ以上の非スペース文字: "hello".*
中央部分、任意の文字:「世界」\s
スペース文字: ""(\S)
2番目のグループ、非スペース文字: "u".*$
最後までの任意の文字: "nix"/\1\2/
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
例として「helloworldunix」を使用した説明:
var_end=${var##* }
一致するプレフィックスパターン、最長の一致を削除し、${var%% *}
一致するサフィックスパターン、最長の一致を削除し、${var_end:0:1}
最初の文字を取得: "u"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