正規表現を使用したシェル変数の変更

正規表現を使用したシェル変数の変更

たとえば、シェル変数があります。 a = "大きな小さな男"。 bashで正規表現を使用して大文字の中間語のみを使用して変数を印刷するには? (大人と悪役)

変数を3つの変数に分割し、エコーで拡張するだけです。たとえば、などfirst=${a%* }。しかし、正規表現を使って一度にどうすればいいですか?

一行で可能ですか?大文字演算子(^)を使用してください。

ベストアンサー1

sed

GNU sedを使用しているとします。

$ sed -E 's/(\w+) (\w+) (\w+)/\1 \U\2\E \3/' <<< 'big little man'
big LITTLE man

このコマンドは以下を使用します。GNU固有のシーケンス \U\E後続の文字をそれぞれ大文字に変換し、大文字と小文字の変換をキャンセルします。

アッ

正規表現では動作しませんが、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

これは^^、配列の2番目の要素(つまり2番目の単語)を大文字に変換します。この機能は Bash 4 で導入されました。

おすすめ記事