テキストパターン内の数値を置き換えるbashスクリプトがあります。次のようなファイルがあるとします:
word5word
word55word
そして、私はそれをこのように見せたいです:
word125word
word125word
私はそれを行うためにこのスクリプトを持っています:
#!/bin/bash
re='([0-9]|[0-9][0-9])'
while read line
do
new_line=${line/"word"$re"word"/"word"125"word"}
echo "$new_line"
done < /home/tomak/test.txt
何らかの理由で、「re」式が正しく解釈されず、元の行が出力されます。理由がわかりません。これは、1桁の数字、つまりre='[0-9]'
に対して機能します。 。
式を定式化するために、私は初心者向けのBashガイドからの情報を使用しました。
2つの正規表現は、中置演算子「|」で結合できます。
結果の正規表現は、
部分式のいずれかに一致する任意の文字列と一致します。
しかし、それは私にはうまくいきません。何が足りないのですか?
shopt -s extglob
を設定しようとしたことに注意してください [0-9][0-9]?
のような式を作成します しかし、それもうまくいきませんでした。
私はUbuntu14.10を使用しており、ストックbashバージョン4.3.30を使用しています。 bash foo.sh
を使用してスクリプトを実行します 。
承認された回答:
パラメータ展開の置換は、正規表現では機能しません。 extglob
ここで役立ちますが、正規表現でも機能しません。
extglob
の下の式の正しい構文
re='+([0-9])'
つまり、1桁以上です。
テスト:
re='+([0-9])'
echo $'word5word\nword55word' | while read line ; do
new_line=${line/"word"$re"word"/"word"125"word"}
echo "$new_line"
done
出力:
word125word
word125word