を使用する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
sedには複雑すぎるものを見つけたときは、awkやperlを試してみてください。
—
Gilles「SO-邪悪なことをやめなさい」
@Cory:構文が正しい場合、例はうまく機能します。あなたはそれがあるべきまだあなたが期待するシェル拡張からそれを隠す「一重引用符」で囲まれた「$変数」を...持っている
—
Peter.O
sed 's/'"${VALUE}"'/foo happy \1/' test.txt
perl -pe 's/^(([a-f0-9]{32})+([a-zA-Z0-9=]{{$i}})?)+:\1$/simple_output/' my_file