כיצד למחוק שורות ספציפיות מקובץ באמצעות sed

בהזדמנויות מסוימות עלינו למחוק שורה ספציפית מקובץ או מספר, למשל, קרה לי שהייתה לי רשימה שלמה של קבצים ואני צריך למחוק את שורה מס '27 מכל אלה (שורה מס' 27 היא של ACL , נורמה, כלל, תצורה), אני יכול לערוך קובץ לפי קובץ או פשוט להשיג את מה שאני צריך באמצעות הפקודה צמא וסקריפט bash (אופציונלי).

אבל, בואו ננסה קובץ בודד פשוט למדי.

יש לנו את הקובץ distros-deb.txt המכיל את זה:

דביאן

קובונטו

ארכינוס

פתרונות

נענע

במילים אחרות, הקובץ distros-deb.txt הוא בו אנו מכניסים את ההפצות מבוססות דביאן, אך שם אנו רואים כי בשורה מס '3 "ארכלינוקס", הפצה שברור שאין לה שום קשר לדביאן, ולכן עלינו לבטל את הקו הזה. כדי לחסל את שורה מס '3 של אותו קובץ, נניח את הדברים הבאים:

sed "3d" distros-deb.txt > distros-deb-ok.txt

להסביר את השורה הזו קל מעט, עם צמא "3d" אנו מציינים כי נמחק שורה שורה 3 עם distros-deb.txt אנו מציינים על איזה קובץ לעבוד, כלומר, מחק את שורה מס '3 של הקובץ הזה, עד כאן אם אנו לוחצים על Enter זה יראה לנו מה אנחנו רוצים אבל במסוף, אז עם > distros-deb-ok.txt אנו מציינים שבמקום להציג את התוצאה במסוף, הוא שם אותה בקובץ בשם זה.

מה פשוט?

כמו כן, אנו יכולים להימנע משימוש ב- > distros-deb-ok.txt באמצעות פרמטר ראוי של צמא, הפרמטר -i

כלומר, במקרה שנרצה למחוק את השורה מהקובץ ולשמור אותה עם אותו שם (ולא בקובץ אחר), פשוט הוסף את הפרמטר -i :

sed -i "3d" distros-deb.txt

פעולה זו תסיר את שורה מס '3 מ- distros-deb.txt ותשמור אותה.

מה אם אני רוצה טווח של שורות, כלומר להסיר את השורה מספר 3 אבל גם את המס '4 ואת מספר 5? כדי להשיג זאת שמנו את הטווח שבין 3 ל -5, כלומר:

sed -i "3,5d" distros-deb.txt

וזה יראה לי רק דביאן וקובונטו 😀

אז מה אם אני רוצה למחוק משורה 2 לשורה האחרונה, כשאני לא יודע את כל השורות?

פשוט השתמש בסמל הדולר - »$

sed -i "2,$d" distros-deb.txt

במקרה שתרצה לבטל מהשורה הראשונה למספר 4 אז פשוט שמנו את הערך 1 בהתחלה:

sed -i "1,4d" distros-deb.txt

זה היה הכל, טיפ שימושי מאוד כשאתה רוצה ליצור סקריפטים bash לאוטומציה של משימות ואתה צריך לשנות ולבטל שורות של קבצי תצורה, כדי לשנות נוכל להשתמש צמא o פרל, כמו גם לחסל אנחנו כבר יודעים לעשות את זה עם sed sed

לגבי


תוכן המאמר עומד בעקרונותינו של אתיקה עריכתית. כדי לדווח על שגיאה לחץ כאן.

16 תגובות, השאר את שלך

השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   mss-devel דיג'ו

    תרומה טובה מאוד 😉

    1.    KZKG ^ גאארה דיג'ו

      תודה

      אגב, קיבלנו את הדוא"ל שלך עכשיו אני עונה לך 😀

      לגבי

  2.   ללא שם דיג'ו

    ככהן גדול לטרמינל, לשרתים ולחיבורי ssh אני מגיע אליך, הו נהדר KZKG ^ גאארה, ואני שואל אותך: איפה אוכל לקבל הדרכה ברמת בורותי שמאפשרת לי להשתמש בחיבורי ssh בין שתי מכונות מרוחקות ברשתות שונות כדי לשתף קבצי טקסט, pdf, תמונה וסאונד (mp3) ....

    ???

    ברצינות, האם תוכל להדריך אותי בהקשר זה, יש לי שתי מכונות, אחת בעבודה ואחת בבית ואני זקוק לחיבור ssh ביניהן (מכיוון שכפי שאני מבין את זה, ssh מאפשרת לשתף תוכן בין מכונות, האם אני טועה?).
    ואם אני טועה, על איזה יישום אתה ממליץ?
    ואיפה אני מוצא הדרכה בסיסית בנושא זה?

    1.    -ספיקר- דיג'ו

      scp.

      משתמש scp @ machine_address: משתמש נתיב @ machine_address: נתיב.

      תחביר זהה ל- cp, מקור -> יעד.

  3.   F3niX דיג'ו

    הופעת גבר, היית אבוד.

  4.   חואקין דיג'ו

    עצה טובה!

  5.   LycusHackerEmo דיג'ו

    טיפ מעניין ... xD

    האם אתה מכיר במקרה אחד שגורם לטקסט מודגש להתבלט?
    כלומר, יש לי קובץ txt שהוא מילון, יש לו יותר מ -10000 שורות ואני רוצה שהוא יסמן טקסט מסוים לפני ":" השעיית הנקודות וביצועו אחד אחד זה יותר מדי.

    1.    KZKG ^ גאארה דיג'ו

      שלום,

      קובץ txt הוא טקסט רגיל, כשמו כן הוא ... רגיל, ללא פורמטים או משהו דומה, אני מצטער אבל אני חושב שמה שאתה שואל לא יכול להיעשות, נכון? 🙁

      לגבי

      1.    aca דיג'ו

        למעשה זה יכול, אבל תצטרך לדעת את פורמט היעד.
        לְמָשָׁל:
        הד $ (הד "רוברט: שלום. שנה כאן" | sed's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m / ')
        זה עניין של התמודדות.
        הדרך השנייה למחוק שניתן להשתמש בה היא sed '/' $ 1 '/ d', אך אתה צריך להיות בטוח בעניין.

        1.    LycusHackerEmo דיג'ו

          ואז סיים לשמור אותו ב * .odt

          האם אין דרך קלה יותר לעשות זאת באמצעות LibreOffice?

  6.   לולו דיג'ו

    האם תוכל למחוק חלק משורה ולהשאיר את השאר?

    נניח שאני רוצה למחוק הכל מול מילה בשורה מסוימת.

    או מחק את כל מה שעוקב אחרי המילה הזו.

    1.    aca דיג'ו

      כן, זה עניין של משיכת רגקס (אם יש צורך בנאדם sed -r, –regexp-extended)
      החל ממה שאני מוצא
      הד «רוברט: שלום. שנה כאן »| sed's / Change // '
      עם דפוס מוגדר היטב ועם. (תו אחד) ו- * (יותר מאחד)
      לאחר:
      הד «רוברט: שלום. שנה כאן »| sed's / Change. * // '
      לפני:
      הד «רוברט: שלום. שנה כאן »| sed של /. * שנה // '
      אם חשוב שהמילה מופיעה
      הד «רוברט: שלום. שנה כאן »| sed's / Change. * / Change / '
      או יותר משוכלל
      בשורה המכילה את רוברט את מה שהולך אחרי צ'יינג '
      הד - e «פריץ: שלום. שנה כאן \ n רוברט: שלום. שנה כאן »| sed '/Robert/s/Cambio.*//'
      או כמו בהתחלה הוצא את השורה השנייה ועבד את השאר
      הד - e «פריץ: שלום. שנה כאן \ n רוברט: שלום. שנה כאן \ nאחר »| sed -e 2d -e 's / Change. * //'
      הד - e «פריץ: שלום. שנה כאן \ n רוברט: שלום. שנה כאן \ nאחר »| sed '2d; s / Change. * //'

      1.    לולו דיג'ו

        תודה, זה מאוד שימושי עבורי.

  7.   MSX דיג'ו

    מאמר נחמד, אחד מאלה שאני אוהב, כמה נהדר SysAdmin!
    מה היו חיינו בלי סד, ווק, פרל, גרפ, זנב, ראש, "Emacs" וכל כך הרבה כלים חיוניים אחרים!?

  8.   ליסבת אולארבס דיג'ו

    תודה, זה היה מאוד מועיל.

  9.   פרני דיג'ו

    שלום, ואיך תוכל למחוק את השורות 1,4 ו- 10 מקובץ באותה פקודה?