Frage

( Fast doppelte genauer von Originalformat POST Keeping durch AWK vorbei von derselben Person geschrieben. )

Ich habe eine einfache Frage in Bezug auf g awk, dargestellt unter:

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

den folgenden gaffen Code verwenden - mit gensub () ursprüngliche Formatierung beibehalten:

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

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

Wie kann ich g awk oder awk (vielleicht mit regulären Ausdrücken) vorherige Leerzeichen vor Feld entfernen $ 1 (^)

Illustrated unter:

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

Mit freundlichen Grüßen im Voraus

War es hilfreich?

Lösung

Dies funktioniert, aber in dem Wissen, dass Sie immer wollen drei Räume abzustreifen.

vinko@parrot:~$ cat foo.c
  1 int blah (void)
  2 {
  3         if (foo) {
  4                 printf ("blah\n");
  5         }
  6         return 0;
  7 }

vinko@parrot:~$ gawk '{ print gensub(/^   /,"",1,gensub($1, "", 1)) }' foo.c    
int blah (void)
{
        if (foo) {
                printf ("blah\n");
        }
        return 0;
}

Andere Tipps

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

Dies ist von der berühmten awk 1 Liner Liste kann hier gefunden werden: http: //student.northpark.edu/pemente/awk/awk1line.txt

Das erscheint mir als ein Fall von ‚falschen Werkzeug für den Job‘ zu sein. Ich würde verwenden sed`:

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

Nun, wenn das Problem alles über die inner meisten Details von awk ist, kann dies keine Hilfe sein; wenn das Problem Leerzeichen entfernt ist zu bekommen, ist es schneller und (zumindest diskutierbar) einfacher.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top