1. ホーム
  2. regex

[解決済み】正規表現を使ってbashで検索と置換をする

2022-04-12 18:16:48

質問

このような例を見たことがあります。

hello=ho02123ware38384you443d34o3434ingtod38384day
echo ${hello//[0-9]/}

この構文に従います。 ${variable//pattern/replacement}

残念ながら pattern フィールドは完全な正規表現構文をサポートしていないようです (もし私が . または \s 例えば,リテラル文字にマッチしようとする)。

完全な正規表現構文を使用して文字列を検索/置換するにはどうすればよいですか?

どのように解決するのですか?

使用方法 セッド :

MYVAR=ho02123ware38384you443d34o3434ingtod38384day
echo "$MYVAR" | sed -e 's/[a-zA-Z]/X/g' -e 's/[0-9]/N/g'
# prints XXNNNNNXXXXNNNNNXXXNNNXNNXNNNNXXXXXXNNNNNXXX

なお、後続の -e は順番に処理されます。 また g フラグを使用すると、入力に含まれるすべての表現にマッチします。

この方法で、perl や awk など、自分の好きなツールを選ぶこともできます。

echo "$MYVAR" | perl -pe 's/[a-zA-Z]/X/g and s/[0-9]/N/g'

これによって、よりクリエイティブなマッチングを行うことができるかもしれません...。 例えば、上の例では、最初の式がマッチしない限り、数値置換は行われません (怠惰な and の評価)。 もちろん、Perlの完全な言語サポートで、思い通りのことができる...