2

与同一个人提交的通过 AWK 保持原始格式 POST 几乎完全相同

我有一个关于g awk的简单问题,如下图所示:

  1 int blah (void)
  2 {
  3         if (foo) {
  4                 printf ("blah\n");
  5         }       
  6         return 0;
  7 }  

使用以下 gawk 代码 - 使用 gensub() 来维护原始格式:

 gawk '{ print gensub($1, "\t", 1) }' ./sample_code.out

     int blah (void)
     {
             if (foo) {
                     printf ("blah\n");
             }       
             return 0;
     }  

如何使用g awk 或 awk (可能使用正则表达式)删除字段 $1 之前的先前空格(^)

如下图所示:

 int blah (void)
 {
         if (foo) {
                 printf ("blah\n");
         }       
         return 0;
 }  

提前致以亲切的问候

4

3 回答 3

4
awk '{sub(/^[ \t]+/, ""); print}'

这是来自著名的 awk 1 衬垫列表,可以在这里找到:http ://student.northpark.edu/pemente/awk/awk1line.txt

于 2009-01-03T14:22:57.267 回答
2

这让我觉得这是一个“错误的工作工具”。我会使用 sed`:

sed 's/^[ <tab>]*//' sample.out

现在,如果问题全在于 的最内部细节awk,这可能无济于事;如果问题是要删除空格,它会更快并且(至少可以说)更简单。

于 2009-01-03T16:33:03.167 回答
1

这行得通,但要知道你总是想去掉 3 个空格。

vinko@parrot:~$ cat foo.c
  1 int blah(无效)
  2 {
  3 如果(富){
  4 printf ("blah\n");
  5 }
  6返回0;
  7 }

vinko@parrot:~$ gawk '{ print gensub(/^ /,"",1,gensub($1, "", 1)) }' foo.c    
int blah(无效)
{
        如果(富){
                printf ("废话\n");
        }
        返回0;
}

于 2009-01-03T14:24:05.440 回答