我有以下示例评论GAS代码
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 # );
答案 0 :(得分:3)
Perl的答案也可以接受吗?
script.pl :
#!/usr/bin/perl -w
while(<>) {
if(m/^(.+?)\s*(#.*)?$/) {
my ($code, $comment) = ($1, $2);
if($comment) {
printf "%- 40s %s\n", $code, $comment;
}
else {
print "$code\n";
}
}
else {
print;
}
}
称之为:
cat file.asm | perl script.pl
答案 1 :(得分:2)
自动拆分perl one-liner。 “如果没有解决,请不要修理它。”
perl -F/(#)/ -ape 'if (@F > 1) { $F[0] = sprintf "%-40s",$F[0]; $_ = "@F" }' file
答案 2 :(得分:2)
perl -pe'
$_ = sprintf("%-23s %s", $1, $2)
if /^([^#]+)(#.*)/;
' file.in > file.out
我在第一列的第一列留下了评论。使用/^([^#]*)(#.*)/
缩进所有评论。
您也可以编辑文件,而不是创建新文件。
备份:
perl -i~ -pe'...' file
没有备份:
perl -i -pe'...' file
答案 3 :(得分:2)
来吧,伙计们,他指定了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 # );
答案 4 :(得分:0)
index($0, "#") {
$0 = sprintf("%-24s%s",
substr($0, 1, index($0, "#") - 1),
substr($0, index($0, "#")));
}
1