سؤال

(بالضبط تقريبا مكررة الحفاظ على الشكل الأصلي بعد يمر من خلال AWK قدمت من قبل الشخص نفسه.)

لدي سؤال بسيط المتعلقة زawk ، كما هو موضح أدناه:

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

باستخدام التالية البله التعليمات البرمجية باستخدام gensub() للحفاظ على التنسيق الأصلي:

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

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

كيف يمكنني استخدام زawk أو awk (ربما مع التعبيرات العادية) لإزالة السابقة بيضاء قبل ميدان $1 (^ )

موضحة أدناه:

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

مع أطيب التحيات مقدما

هل كانت مفيدة؟

المحلول

يعمل هذا ، ولكن في المعرفة التي كنت دائما تريد أن قطاع 3 مسافات.

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;
}

نصائح أخرى

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

هذا من شهرة awk 1 بطانات القائمة ، يمكن العثور عليها هنا: http://student.northpark.edu/pemente/awk/awk1line.txt

هذا يبدو لي بأنها حالة من 'أداة خاطئة لهذا المنصب'.كنت استخدم sed`:

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

الآن, إذا كانت المشكلة هي كل شيء عن الداخلية تفاصيل awk, هذا قد يكون من أي مساعدة.إذا كانت المشكلة هو الحصول على مساحات إزالتها ، فمن أسرع (على الأقل يمكن القول) أبسط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top