2009-08-30 3 views
0

私は置き換える必要のあるbashスクリプトで変数を取得しました。この行の唯一の定数は、 "_(* x)xxxp.mov"で終わることです。 xは数字で、長さは3または4のいずれかになります。例えば、私は値を交換する方法を知っているが、それは一定である場合にのみ:正規表現に先行する

echo 'whiteout-tlr1_1080p.mov' | sed 's/_[0-9]*[0-9][0-9][0-9]p.mov/_h1080p.mov/g' 

私は交換用のラインに正規表現マッチの上に運ぶことができますどのように?

編集:

[OK]を私はgrepのが唯一の試合は、このような何かをする方が良いだろう印刷できることを学びましたか?

urltrail=$(echo [email protected] | grep -o [0-9]*[0-9][0-9][0-9]p.mov) 
newurl=$(sed 's/$urltrail/h$urltrail/g') 

ええ、上記を試しましたが、ハングアップしています。

答えて

1

Back Reference

sed 's/_\([0-9]*[0-9][0-9][0-9]\)p.mov/_h\1p.mov/g' 

nが一桁である後方参照\nは、以前に正規表現のn番目の括弧内の部分式によりマッチした部分文字列と一致します。

+0

イアンsedとregexのこと、そして彼らが何をすることができるかを学ぶのは良いことです。助けてくれてありがとう。 – user148813

0

あなたはsedに古いパスをパイプしていないので、sedは入力を待っています。

newurl=$(echo [email protected] |sed 's/$urltrail/h$urltrail/g') 
+0

Ack、私はそれを見逃し、良いキャッチスクラガ。 – user148813

+0

これは、行末の後ろに固定されたリテラルテキスト 'urltrail'を検索します。あなたは二重引用符を使用してsed "/ $ urltrail ..."を実行することができますが、これはワームの異なる缶を開きます($ urltrailにスペースや '/'などの正規表現メタ文字が含まれる場合など)。 –