在文本文件的多行的第80列中插入字符

rec*_*ecu 0 vim awk sed

我编写了一个多行C宏,出于可读性的考虑,我想在每行的第80列插入字符'\'.一个例子可能有助于理解我需要什么.假设宏最初是这样的:

#define MY_MACRO \
expression \
a_longer_expression \
 \
a_super_jumbo_size_expression \
macro_ends_here
Run Code Online (Sandbox Code Playgroud)

我希望最终结果是这样的:

#define MY_MACRO                     \
expression                           \
a_longer_expression                  \
                                     \
a_super_jumbo_size_expression        \
macro_ends_here
Run Code Online (Sandbox Code Playgroud)

因此,每行应填充从最后一个非空格字符到第79列的空格,然后在第80列中插入'\',包括空行.

这可能使用vim,sed或awk吗?如果是,怎么样?

Tom*_*ock 7

选择所需的范围并输入以下ex命令:

:'<,'>s/\s*\\$/\=repeat(' ', 80-col('.')).'\'
Run Code Online (Sandbox Code Playgroud)

在行的末尾用空格和\替换表达式,该表达式在第80列之前重复一个空格,然后附加一个\字符.如果您的行超过80个字符,它将附加0个空格,这可能不是您想要的,在这种情况下,将80更改为79并为字符串添加空格:' \'


Ken*_*ent 5

在vim一种可能性摆弄g:ve:

:g/\\$/set ve=all|normal $x80|r\
Run Code Online (Sandbox Code Playgroud)

如果你想在修改后设置ve回来"":

:g/\\$/set ve=all|exec 'normal $x80|r\'|set ve=""
Run Code Online (Sandbox Code Playgroud)

或者awk

 awk '/\\$/{sub(/\\$/,"");$0=sprintf("%s%"80-length($0)"s",$0,"\\")}7' file
Run Code Online (Sandbox Code Playgroud)