Linux

如何在空格後獲得單個字元?

  • August 3, 2019

我怎樣才能得到低於輸出?我想要第一個欄位原樣和空格後的單個字元。

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”

引用自:https://unix.stackexchange.com/questions/512357