ske*_*tax 2 bash sed line-breaks multiline
在我的 shell 脚本中,我将 for 循环的输出通过管道传输到带有长“s|||”的嵌入式 sed 命令中 替换语句,如下:
#/usr/bin/bash
output=/cygdrive/c/output.csv
for i in a b {d..z}
do
find /cygdrive/$i -type f -name "*.ext" -printf "%p %k\n" |
sed -e "s|^.\+/\([A-Z]\+\)/\(20..\)/\([0-9]\+\)-\([0-9]\+\)\.bfc\ \([0-9]\+\)|$i,\1,\2-\3-\4,\2,\3,\4,\5|"
done >> $output
Run Code Online (Sandbox Code Playgroud)
sed 命令太长,所以我的问题是如何将 sed 行包装在多行中并打破它?
例如:
#/usr/bin/bash
output=/cygdrive/c/output.csv
for i in a b {d..z}
do
find /cygdrive/$i -type f -name "*.ext" -printf "%p %k\n" |
sed -e
"s|^.\+/\([A-Z]\+\)/\(20..\)/\([0-9]\+\)-\([0-9]\+\)\.bfc\ \([0-9]\+\)
|$i,\1,\2-\3-\4,\2,\3,\4,\5|"
done >> $output
Run Code Online (Sandbox Code Playgroud)
小智 5
你能把那个特定的字符串放在一个变量中,比如:
SED_PATTERN="s|^.\+/\([A-Z]\+\)/\(20..\)/\([0-9]\+\)-\([0-9]"
SED_PATTERN+="\+\)-\([0-9]\+\)\.bfc\ \([0-9]\+\)"
SED_PATTERN+="|$i,\1,\2-\3-\4,\2,\3,\4,\5|"
for i in a b {d..z}
do
find /cygdrive/$i -type f -name "*.ext" -printf "%p %k\n" |
sed -e "$SED_PATTERN"
done >> $output
Run Code Online (Sandbox Code Playgroud)
我认为这将是最干净的方式。