Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何设置程序集注释的格式_Linux_Perl_Awk_Code Formatting - Fatal编程技术网

Linux 如何设置程序集注释的格式

Linux 如何设置程序集注释的格式,linux,perl,awk,code-formatting,Linux,Perl,Awk,Code Formatting,我有下面的示例注释气体代码 cmpb $45, (%ebx) # 45 - ASCII '-' jne r_filename cmpb $118, 1(%ebx) # 118 - ASCII 'v' jne r_filename movl $4,%eax # write( movl $1,%ebx # STDOUT, movl $Leng, %edx # len * movl $Inform, %ecx # *Buffer

我有下面的示例注释气体代码

cmpb $45, (%ebx)  # 45 - ASCII '-'
jne r_filename
cmpb $118, 1(%ebx) # 118 - ASCII 'v'
jne r_filename
movl    $4,%eax        # write(
movl    $1,%ebx        #   STDOUT,
movl    $Leng, %edx     #   len *
movl    $Inform, %ecx #   *Buffer
int     $0x80          # );    
如何使用AWK格式化这样的注释:

cmpb $45, (%ebx)        # 45 - ASCII '-'
jne r_filename
cmpb $118, 1(%ebx)      # 118 - ASCII 'v'
jne r_filename
movl    $4,%eax         # write(
movl    $1,%ebx         #   STDOUT,
movl    $Leng, %edx     #   len *
movl    $Inform, %ecx   #   *Buffer
int     $0x80           # );  

Perl中的答案也可以接受吗

script.pl:


自动拆分一行程序。“如果它没有坏,就不要修理它。”

我在第一栏的第一栏留下了评论。使用
/^([^#]*)(#.*)/
缩进所有注释

也可以在位编辑文件,而不是创建新文件

使用备份:

perl -i~ -pe'...' file
无备份:

perl -i -pe'...' file

来吧,伙计们,他指定了Awk:

 awk -F# '{printf "%-30.30s #%s\n", $1, $2}' $oldFile > $newFile
-F#
使用英镑符号作为分隔符。
printf
将其格式化<代码>%30.30s表示将此字段左对齐30个字符宽。
%s
只是说打印第二个字段。结果是:

cmpb $45, (%ebx)               # 45 - ASCII '-'
jne r_filename                 #
cmpb $118, 1(%ebx)             # 118 - ASCII 'v'
jne r_filename                 #
movl    $4,%eax                # write(
movl    $1,%ebx                #   STDOUT,
movl    $Leng, %edx            #   len *
movl    $Inform, %ecx          #   *Buffer
int     $0x80                  # );    

Emacs中的M-x align regexp将执行此操作<代码>缩进制表符模式可能应该是
nil
,但为了保持理智。不要忽略一些小语言,比如GNU sed,例如
sed-r'/#/!Bs/^([^#]*)(#.*)/printf“%-40s%s”“\1”“\2”/e”“
也能完成此任务!使用lookahead IMO进行拆分更干净。“i”标志在这里也很有用。@Zaid如果您愿意,您可以进行就地编辑,但是shell重定向对于perl初学者来说更安全。为什么在前瞻性的情况下拆分会更干净?这也是一样的。对于这个问题,这无关紧要,但是
split/(#)/
会抛出三个字符串
($code,“#',$comment)
,而
split/(?=#)/
返回两个
($code,$comment)
@Zaid我明白你的意思了。但是,正如您所说,在这里它并不重要,因为它只是我们感兴趣的第一个字符串。有人可能会说,它在连接时确实添加了另一个空格。如果有空行,则会失败。@TLP,[由halo发布的代码]如果有空行,则会失败。@ikegami这是真的
while(){m/..
将是更正确的版本。@TLP必须是
if(m/..
,因为不成功的匹配不会清除
$1
之类的内容。@halo,如果将
/^(+?)\s*(#.*)$/
更改为
/^(+?)\s*(#.*),则可以删除内部
if
$/
。它在以前没有的地方输出
。并且它不处理具有多个
的行(@TLP,我更喜欢工作解决方案,这就是为什么我使用
if/^([^#]+)(#.*/
而不是“pretty”
-F
)顺便说一句,虽然OP最初要求一个awk解决方案,但后来他从主题中删除了awk并添加了Perl标记。@ikegami实际上,我从标题中删除了
awk
。也许我不应该这样做。@ikegami-这输出了以前没有的东西。是的,但这不会损害任何东西。我想把它作为一个简单的开始e liner。我可以测试NR并相应地使用printf。当我提出这个问题时,他仍然有awk。他已经从主题中删除了awk并添加了Perl标记。我刚才提出了它,但直到现在才开始回答。嗯?插入不需要的
#
怎么没有害处?当然,汇编程序没有注意,但代码不仅仅是为汇编程序编写的。+1我们所有的解决方案中,我关心的一件事是引号字符串中可能存在哈希符号。但这可能不适用于汇编程序代码。@TLP,是的,我知道这一点。可能只是做一个
diff
,然后调整/远程任何不正确的修复。
perl -pe'
    $_ = sprintf("%-23s %s", $1, $2)
       if /^([^#]+)(#.*)/;
' file.in > file.out
perl -i~ -pe'...' file
perl -i -pe'...' file
 awk -F# '{printf "%-30.30s #%s\n", $1, $2}' $oldFile > $newFile
cmpb $45, (%ebx)               # 45 - ASCII '-'
jne r_filename                 #
cmpb $118, 1(%ebx)             # 118 - ASCII 'v'
jne r_filename                 #
movl    $4,%eax                # write(
movl    $1,%ebx                #   STDOUT,
movl    $Leng, %edx            #   len *
movl    $Inform, %ecx          #   *Buffer
int     $0x80                  # );