sedで何度も再利用するために複雑な正規表現を保存する方法は?

sedで何度も再利用するために複雑な正規表現を保存する方法は?

使用中は、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"'}})?)+'

おすすめ記事