Bash

使用正則表達式 (bash) 修改 shell 變數

  • February 14, 2019

例如,我有一個 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 中引入的。

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