長いsed式を複数行に分割する方法は?

長いsed式を複数行に分割する方法は?
sed 's/[long1][long2]/[long3][long4]/' file.txt

このコマンドを次のようにfx複数行に分割したいと思います。

sed 's/
    [long1]
    [long2]
  /
    [long3]
    [long4]
  /' file.txt

文字列を区切るためにまたはを使用しても\機能しません。

答え1

sed 's'/\
'[long1]'\
'[long2]'\
'/'\
'[long3]'\
'[long4]'\
'/' file.txt

新しい行をインデントしない場合は、バックスラッシュを使用して複数の行を分割できます。

$ echo "a,b" | sed 's/\(.'\
> '\),\(.\)/\2-\1/'
b-a

GNU sed 4.2.2を使用してCygwinでテストされました。

答え2

一方:

上記のプロジェクトはどれくらいメンテナンスが簡単ですか[long]

条項を短く、明確に保つほど、時間の経過とともに、条項の変更と強化が容易になり、その条項が提供する機能に関する(sed-外部)事実が変わります。

例えば

sed\
-e 's/[min-s1]/[min-r1]/' \
-e 's/[最小-s2]/[最小-r2]/' \
-e 's/[最小-s3]/[最小-r3]/' \
-e 's/[最小-s4]/[最小-r4]/'

...努力して楽しむ価値があることになることもあります。

答え3

長い文字列をbash変数に保存してから、sedコマンドで使用できます。

string=[long1][long2]
replace=[long3][long4]
sed -e 's/'"$string"'/'"$replace"'/' file

以下が利用可能な場合は、perl修飾子で長いパターンを壊すことができますx

perl -e 's/
[long1]
[long2]
/[long3][long4]/x' file

答え4

次のように分解することもできます。

sed '/[long1][long2]/
    s//[long3][long4]/'

または、次のようになります。

sed "$(
    printf 's/[%s][%s]/[%s][%s]/' \
        long1 \
        long2 \
        long3 \
        long4
)"

または区切り記号を使用してください。

sed -f - <<SED file.txt
s/\
[long1]\
[long2]\
/\
[long3]\
[long4]\
/
SED

関連情報