スペースの後に単一の文字を取得する方法は?

スペースの後に単一の文字を取得する方法は?

以下の出力をどのように取得できますか?最初のフィールドをそのままにして、スペースの後に文字を追加したいと思います。

echo "Hello world"
Hellow

3番目のフィールドもある場合は、3番目のフィールドの先頭文字が出力に表示されます。

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+)最初のグループ、1つ以上の空白以外の文字: "hello"
  • .*中間部分、すべての文字: "world"
  • \s空白文字: ""
  • (\S)2番目のグループ、空白以外の文字: "u"
  • .*$最後までのすべての文字: "nix"
  • /\1\2/最初と2番目のグループ「hello」に置き換えます。

バッシュ使用:

$ 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

バッシュ使用:

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

関連情報