使用中は、sed
ファイル内で2回一致する必要があるかなり複雑な正規表現を作成することがよくあります。この正規表現を保存して2回だけ参照する方法はありますか?
たぶんこんなことがあったのでしょうか?
sed ' complicated_regex=/^(([a-f0-9]{32})+([a-zA-Z0-9=]{{$i}})?)+$/
s/complicated_regex:complicated_regex/simple-output/
' my_file
更新:答えはbash変数を使用する解決策を提案します。これはうまくいきません。与えられたtest.txt
。
#test.txt
foo bar
bar foo
そしてスクリプト
#!/bin/bash
VALUE='foo \([a-z]\+\)'
sed 's/"${VALUE}"/foo happy \1/' test.txt
これにより出力が生成されます。
foo happy bar
bar foo
しかし、エラーが発生しました。
sed: -e expression #1, char 24: invalid reference \1 on `s' command's RHS
ベストアンサー1
シェル変数を使用できます。
complicated_regex='(([a-f0-9]{32})+([a-zA-Z0-9=]{{$i}})?)+'
sed s/^"$complicated_regex":"$complicated_regex"\$/'simple-output'/ my_file
どういう意味なのかよく分からないが、一重$i
引用符の外に入れなければならないようです。
complicated_regex='(([a-f0-9]{32})+([a-zA-Z0-9=]{{'"$i"'}})?)+'