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