英文:
Adding an empty newline after a comment block in bash code using sed
问题
我正在尝试使用sed重新格式化一系列相当大的bash脚本。
它们包含很多类似于以下内容的代码:
# 这里是第一个注释
# 这里是第二个注释
if [[ -n "$some_variable" ]]; then
do_something
fi
或者:
# 这里是第一个注释
# 这里是第二个注释
# 这里是第三个注释
if [[ -n "$some_variable" ]]; then
do_something
fi
我应该如何利用sed在注释(即以#开头的行)和任何非注释代码之间添加一个换行,就像这样:
# 这里是第一个注释
# 这里是第二个注释
<--- 由sed插入的新行
if [[ -n "$some_variable" ]]; then
do_something
fi
或者,对于第二个示例:
# 这里是第一个注释
# 这里是第二个注释
# 这里是第三个注释
<--- 由sed插入的新行
if [[ -n "$some_variable" ]]; then
do_something
fi
英文:
I am trying to reformat a series of rather large bash scripts using sed.
They contain a lot of code that looks something like this:
# first comment goes here
# second comment goes here
if [[ -n "$some_variable" ]]; then
do_something
fi
or:
# first comment goes here
# second comment goes here
# third comment goes here
if [[ -n "$some_variable" ]]; then
do_something
fi
How can I leverage sed to add a newline in-between a comment (so a line that starts with #) and any non-comment code, like so?:
# first comment goes here
# second comment goes here
<--- newline inserted here by sed
if [[ -n "$some_variable" ]]; then
do_something
fi
or, for the second example:
# first comment goes here
# second comment goes here
# third comment goes here
<--- newline inserted here by sed
if [[ -n "$some_variable" ]]; then
do_something
fi
答案1
得分: 1
使用任何awk:
$ awk '{pCom=cCom; cCom=/^#/} NF && !cCom && pCom{$0=ORS $0} 1' file
# 第一个注释在这里
# 第二个注释在这里
if [[ -n "$some_variable" ]]; then
做某事
fi
或者:
# 第一个注释在这里
# 第二个注释在这里
# 第三个注释在这里
if [[ -n "$some_variable" ]]; then
做某事
fi
以上是在此输入文件上运行的:
$ cat file
# 第一个注释在这里
# 第二个注释在这里
if [[ -n "$some_variable" ]]; then
做某事
fi
或者:
# 第一个注释在这里
# 第二个注释在这里
# 第三个注释在这里
if [[ -n "$some_variable" ]]; then
做某事
fi
如果您更喜欢您的脚本更难理解,您可以将以上内容编写为:
```shell
awk '{p=c;c=/^#/}NF&&!c&&p{$0=ORS$0}1' file
英文:
Using any awk:
$ awk '{pCom=cCom; cCom=/^#/} NF && !cCom && pCom{$0=ORS $0} 1' file
# first comment goes here
# second comment goes here
if [[ -n "$some_variable" ]]; then
do_something
fi
or:
# first comment goes here
# second comment goes here
# third comment goes here
if [[ -n "$some_variable" ]]; then
do_something
fi
The above was run on this input file:
$ cat file
# first comment goes here
# second comment goes here
if [[ -n "$some_variable" ]]; then
do_something
fi
or:
# first comment goes here
# second comment goes here
# third comment goes here
if [[ -n "$some_variable" ]]; then
do_something
fi
If you prefer your scripts more indecipherable you could write the above as:
awk '{p=c;c=/^#/}NF&&!c&&p{$0=ORS$0}1' file
答案2
得分: 1
这可能适用于你(GNU sed):
sed '/^\s*#/{:a;n;//ba;/\S/{x;p;x}}' file
如果一行以注释开头,则打印该行并获取下一行。
如果该行以注释开头,则重复上述步骤。
否则,如果该行不为空,则打印一个空行。
始终打印当前行。
英文:
This might work for you (GNU sed):
sed '/^\s*#/{:a;n;//ba;/\S/{x;p;x}}' file
If a line begins with a comment, print it and fetch the next line.
If the that line begins with a comment, repeat above.
Otherwise, if the line is not empty, print an empty line.
Always print the current line.
答案3
得分: 0
看起来很简单。
sed '/^[^ \t]*\(#\|$\)/{
{
:comment
n
//bcomment
}
s/^/\n/
}'
英文:
Looks simple.
sed '/^[^ \t]*\(#\|$\)/{
{
:comment
n
//bcomment
}
s/^/\n/
}'
答案4
得分: 0
for __ in
# 第一个注释在这里
# 第二个注释在这里
if [[ -n "$some_variable" ]]; then
做一些事情
fi
# 第一个注释在这里
# 第二个注释在这里
# 第三个注释在这里
if [[ -n "$some_variable" ]]; then
做一些事情
fi ; do printf '%s' "$__" |
---
> mawk 'NF-!_ || ($!NF = RS $_)(FS = "$")' FS='^#'
---
done
1 # 第一个注释在这里
2
3 # 第二个注释在这里
4
5 if [[ -n "$some_variable" ]]; then
6
7 做一些事情
8
9 fi
1 # 第一个注释在这里
2
3 # 第二个注释在这里
4 # 第三个注释在这里
5
6 if [[ -n "$some_variable" ]]; then
7
8 做一些事情
9
10 fi
英文:
for __ in
'# first comment goes here
# second comment goes here
if [[ -n "$some_variable" ]]; then
do_something
fi'
'# first comment goes here
# second comment goes here
# third comment goes here
if [[ -n "$some_variable" ]]; then
do_something
fi' ; do printf '%s' "$__" |
> mawk 'NF-!_ || ($!NF = RS $_)(FS = "$")' FS='^#'
done
1 # first comment goes here
2
3 # second comment goes here
4
5 if [[ -n "$some_variable" ]]; then
6
7 do_something
8
9 fi
1 # first comment goes here
2
3 # second comment goes here
4 # third comment goes here
5
6 if [[ -n "$some_variable" ]]; then
7
8 do_something
9
10 fi
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论