Bash
使用正則表達式 (bash) 修改 shell 變數
例如,我有一個 shell 變數。a=“大個子小人”。如何在 bash 中使用正則表達式列印出只有中間單詞大寫的變數?(大個子)
我可以通過將變數分成 3 個變數然後在 echo 中擴展它們來做到這一點。例如
first=${a%* }
,等等。但是我如何使用一個正則表達式一次性完成呢?是否可以在一行中完成?使用大寫運算符 (^)
但
假設您使用的是 GNU sed:
$ sed -E 's/(\w+) (\w+) (\w+)/\1 \U\2\E \3/' <<< 'big little man' big LITTLE man
此命令使用GNU 特定序列
\U
,\E
並將後續字元分別轉換為大寫和取消大小寫轉換。awk
雖然不對正則表達式進行操作,但
awk
提供了另一種將單個單詞大寫的便捷方法:$ awk '{print($1, toupper($2), $3)}' <<< 'big little man' big LITTLE man
重擊
儘管 Bash 本身沒有基於正則表達式的轉換,但您仍然可以通過將字元串視為數組來實現部分大寫,例如
$ (read -a words; echo "${words[0]} ${words[1]^^} ${words[2]}") <<< 'big little man' big LITTLE man
這裡
^^
將我們數組的第二個元素(即第二個單詞)轉換為大寫。該功能是在 Bash 4 中引入的。