How to split long sed expression into multiple lines?
sed 's'/\
'[long1]'\
'[long2]'\
'/'\
'[long3]'\
'[long4]'\
'/' file.txt
Splitting on several lines with backslash does work if new lines are not indented.
$ echo "a,b" | sed 's/\(.'\
> '\),\(.\)/\2-\1/'
b-a
Tested on Cygwin with GNU sed 4.2.2
Another aspect:
How maintainable are the [long]
items above?
The shorter and more distinct you can keep the clauses, the easier they will be to change and enhance as time passes and (sed-external) facts change around the the function they provide.
e.g.
sed \ -e 's/[minimal-s1]/[minimal-r1]/' \ -e 's/[minimal-s2]/[minimal-r2]/' \ -e 's/[minimal-s3]/[minimal-r3]/' \ -e 's/[minimal-s4]/[minimal-r4]/'
... might be something to strive for and prefer.
You can save long string to bash variables, then use in sed
command:
string=[long1][long2]
replace=[long3][long4]
sed -e 's/'"$string"'/'"$replace"'/' file
If you can use perl
, you can break long pattern with x
modifier:
perl -e 's/
[long1]
[long2]
/[long3][long4]/x' file