bash脚本中的换行问题

7

在我的公司的样式指南中规定,bash脚本不能超过80行。所以我有一个巨大的sed替换,长度是两倍以上。我该如何将它分成更多行,使其仍然能够正常工作?我有:

sed -i s/AAAAA...AAA/BBBBB...BBB/g

我想要类似这样的东西。
sed -i s/AAAAA...AAA/
BBBBB...BBB/g

仍然产生相同的效果。

80个字符的列宽,这是一个旧的遗留需求... - jordanm
@jordanm 如果你在 bash 脚本中超过 80 列长度,99% 的情况下你正在做一些错误的事情。 - Swiss
2
@Swiss - 用管道传递到 awk 很容易实现。 - jordanm
@jordanm,你的描述听起来可能需要整理一下。Awk是一种脚本语言,因此复杂的Awk脚本最好像Perl脚本一样放在自己的文件中。更重要的是,你可以将带管道符的命令分成多行,甚至不需要转义换行符。 - Swiss
3个回答

8

可能的清理方式

1)将您的sed脚本放入文件中。

sed -f script [file ...]

2) 使用正则表达式简写

sed 's!A\{30,\}!BBBBB...BBBB!g'

3) 使用Bash变量来帮助分解它

regex="AAAA.AAAAAA"
replace="BBBB...BBBBBBB"
sed "s/${regex}/${replace}/g"

不应该做的事情

1) 转义换行符以将其分成多行。

这样会在您的sed脚本中产生一个不必要的换行符。

sed 's/THIS IS WRONG /\
AND WILL BREAK YOUR SCRIPT/g'

没错,这是正确的方法;特别是在脚本上下文中使用 sed - Burhan Khalid

1

使用 shell 连续字符,通常为 \

[~]$ foo \
> and \
> bar

不需要空格:

[~]$ foo\
> and\
> bar\
> zoo\
> no space\
> whee!\

是的,但这需要在使用之前插入空格。我在sed替换中没有这个奢侈条件 :( - siemanko

1

只需在换行符前插入反斜杠字符:

sed -i s/AAAAA...AAA/\
BBBBB...BBB/g

是的,但这需要在使用之前插入空格。我在sed替换中没有这个奢侈条件 :( - siemanko
1
没有空格对我来说没问题。 - Alexander Putilin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接