sed 's/[long1][long2]/[long3][long4]/' file.txt
Run Code Online (Sandbox Code Playgroud)
我想将此命令拆分为多行 - fx 如下所示:
sed 's/
[long1]
[long2]
/
[long3]
[long4]
/' file.txt
Run Code Online (Sandbox Code Playgroud)
使用\
或分隔字符串不起作用。
Raf*_*ael 14
sed 's'/\
'[long1]'\
'[long2]'\
'/'\
'[long3]'\
'[long4]'\
'/' file.txt
Run Code Online (Sandbox Code Playgroud)
如果新行不缩进,用反斜杠拆分多行确实有效。
$ echo "a,b" | sed 's/\(.'\
> '\),\(.\)/\2-\1/'
b-a
Run Code Online (Sandbox Code Playgroud)
使用 GNU sed 4.2.2 在 Cygwin 上测试
Han*_*nnu 11
另一个方面:
上述[long]
项目的可维护性如何?
您可以保留条款越短和越明确,随着时间的推移和(sed-external)事实围绕它们提供的功能发生变化,它们就越容易改变和增强。
例如
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]/'
...可能是要争取和喜欢的东西。
您可以将长字符串保存到 bash 变量,然后在sed
命令中使用:
string=[long1][long2]
replace=[long3][long4]
sed -e 's/'"$string"'/'"$replace"'/' file
Run Code Online (Sandbox Code Playgroud)
如果可以使用perl
,则可以使用x
修饰符打破长模式:
perl -e 's/
[long1]
[long2]
/[long3][long4]/x' file
Run Code Online (Sandbox Code Playgroud)
你也可以这样分解:
sed '/[long1][long2]/
s//[long3][long4]/'
Run Code Online (Sandbox Code Playgroud)
或者可能像:
sed "$(
printf 's/[%s][%s]/[%s][%s]/' \
long1 \
long2 \
long3 \
long4
)"
Run Code Online (Sandbox Code Playgroud)
或者使用heredoc:
sed -f - <<SED file.txt
s/\
[long1]\
[long2]\
/\
[long3]\
[long4]\
/
SED
Run Code Online (Sandbox Code Playgroud)