Entfernen Sie Leerzeichen vor einem Feld mit AWK
-
03-07-2019 - |
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
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.