Linux
如何在空格後獲得單個字元?
我怎樣才能得到低於輸出?我想要第一個欄位原樣和空格後的單個字元。
echo "Hello world" Hellow
如果它也有第三個欄位,那麼第三個欄位的開始字元應該在輸出中。
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
以“hello world unix”為例進行說明:
s/
替換以下模式(\S+)
第一組,一個或多個非空格字元:“你好”.*
中間部分,任意字元:“世界”\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”