如何编写一个 awk 来读取文本并遇到以 # 开头的行(即注释行)?

如何编写一个 awk 来读取文本并遇到以 # 开头的行(即注释行)?

它将在接下来的每一行的开头添加#,后跟一个空格,直到段落末尾(段落之间用空行分隔)。已经以 # 开头的行不会被修改 例如以下输入

a b c
d e f
# g h i
j k l
m n o

p q r
s t u

# v w x
# y z 1
2 3 4
# 5 6 7
8 9 0

将被修改为

a b c
d e f
# g h i
# j k l
# m n o

p q r
s t u

# v w x
# y z 1
# 2 3 4
# 5 6 7
# 8 9 0

答案1

尝试这个,

awk '/^$/{comm=0}{if($1~/^#/){comm=1}else{if(comm){$1="# "$1}} print}' file

或相同的长形式:

awk '
    # reset on empty line
    /^$/{comm=0}
    {
        if ($1~/^#/) {
            # start commenting lines when # found
            comm=1
        } 
        else { 
            # comment lines not starting with #
            if (comm){ $1="# "$1 } 
        }
        print
    }
' file

相关内容