Як выдаліць пэўныя радкі з файла з дапамогай sed

У некаторых выпадках нам трэба выдаліць пэўны радок з файла альбо некалькі, напрыклад, са мной здаралася, што ў мяне быў цэлы спіс файлаў, і мне трэба выдаліць радок № 27 з усіх гэтых (радок # 27 - гэта спіс ACL , норма, правіла, канфігурацыя), я магу альбо рэдагаваць файл за файлам, альбо магу проста дасягнуць патрэбнага, выкарыстоўваючы каманду sed і скрыпт bash (неабавязкова).

Але, паспрабуем адзін файл некалькі проста.

У нас ёсць файл distros-deb.txt які змяшчае гэта:

Debian

кубунту

Archlinux

растворы

мята

Гэта значыць, файл distros-deb.txt у якім мы змесцім дыстрыбутывы на аснове Debian, але там мы бачым, што ў радку №3 знаходзіцца "archlinux", дыстрыбутыў, які відавочна не мае нічога агульнага з Debian, таму мы павінны ліквідаваць гэты радок. Каб выключыць радок №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 з выкарыстаннем належнага параметра sed, параметр -i

Гэта значыць, у выпадку, калі мы хочам выдаліць радок з файла і захаваць яго з тым жа імем (а не ў іншым файле), проста дадайце параметр -i :

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

Гэта выдаліць радок № 3 з distros-deb.txt і захавае яго.

Што рабіць, калі я хачу дыяпазон радкоў, гэта значыць выдаліць радок №3, але таксама №4 і №5? Для гэтага мы ставім дыяпазон ад 3 да 5, гэта значыць:

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

І ён пакажа мне толькі debian і kubuntu 😀

Ну і што, калі я хачу выдаліць з радка 2 да апошняга, калі я не ведаю агульнай колькасці радкоў?

Проста выкарыстоўвайце сімвал долара - »$

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

У выпадку, калі вы хочаце выключыць з першага радка да # 4, мы проста ставім значэнне 1 у пачатку:

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

Гэта было ўсё, вельмі карысны савет, калі вы хочаце зрабіць bash-скрыпты для аўтаматызацыі задач, і вам трэба змяніць і ліквідаваць радкі канфігурацыйных файлаў, каб змяніць, мы можам выкарыстоўваць sed o Perl, а таксама для ліквідацыі мы ўжо ведаем, як гэта зрабіць з sed 😉

прывітанне


Змест артыкула адпавядае нашым прынцыпам рэдакцыйная этыка. Каб паведаміць пра памылку, націсніце тут.

16 каментарыяў, пакіньце свой

Пакіньце свой каментар

Ваш электронны адрас не будзе апублікаваны. Абавязковыя для запаўнення палі пазначаныя *

*

*

  1. Адказны за дадзеныя: Мігель Анхель Гатон
  2. Прызначэнне дадзеных: Кантроль спаму, кіраванне каментарыямі.
  3. Легітымнасць: ваша згода
  4. Перадача дадзеных: Дадзеныя не будуць перададзены трэцім асобам, за выключэннем юрыдычных абавязкаў.
  5. Захоўванне дадзеных: База дадзеных, размешчаная Occentus Networks (ЕС)
  6. Правы: у любы час вы можаце абмежаваць, аднавіць і выдаліць сваю інфармацыю.

  1.   mss-devel сказаў

    Вельмі добры ўклад 😉

    1.    KZKG ^ Гаара сказаў

      дзякуй

      Дарэчы, мы атрымалі ваш ліст зараз, я адкажу вам 😀

      прывітанне

  2.   безназоўны сказаў

    Як першасвятар тэрмінала, сервераў і злучэнняў ssh, я звяртаюся да вас, о, цудоўны KZKG ^ Гаара, і я прашу вас: дзе я магу атрымаць падручнік на ўзроўні сваёй недасведчанасці, які дазваляе мне выкарыстоўваць ssh-злучэнні паміж двума аддаленымі машынамі ў розных сетках для сумеснага выкарыстання тэкставыя файлы, pdf, выявы і гук (mp3) ...

    ????

    Калі сур'ёзна, не маглі б вы накіраваць мяне ў гэтым плане, у мяне ёсць дзве машыны, адна на працы і адна дома, і мне патрэбна сувязь ssh паміж імі (бо, як я разумею, ssh дазваляе абменьвацца змесцівам паміж машынамі, я памыляюся?).
    І калі я памыляюся, якое дадатак вы параіце?
    І дзе я магу знайсці асноўны падручнік на гэты конт?

    1.    -спайкер- сказаў

      scp

      scp user @ machine_address: path user @ machine_address: path.

      Той самы сінтаксіс, што і cp, крыніца -> пункт прызначэння.

  3.   F3niX сказаў

    Ты з'явіўся, чалавек, ты згубіўся.

  4.   Хаакін сказаў

    Добры савет!

  5.   LycusHackerEmo сказаў

    Цікавая парада ... xD

    выпадкова вы не ведаеце, які вылучае тлусты тэкст?
    Я маю на ўвазе, што ў мяне ёсць тэкставы файл, які з'яўляецца слоўнікам, ён мае больш за 10000 XNUMX радкоў, і я хачу, каб ён вылучыў пэўны тэкст перад прыпыненнем кропак ":" і рабіць гэта па адным - занадта шмат.

    1.    KZKG ^ Гаара сказаў

      Добры дзень,

      Тэкставы файл - гэта звычайны тэкст, як вынікае з назвы ... звычайны, без фарматаў і чагосьці падобнага, прабачце, але я не думаю, што вы можаце зрабіць тое, што вы просіце, ці не так? 🙁

      прывітанне

      1.    аса сказаў

        на самай справе гэта можа, але вы павінны ведаць фармат прызначэння.
        Пэ:
        echo $ (echo "Роберт: Прывітанне. Змяні тут" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
        справа ў тым, каб абысціся.
        іншы спосаб выдалення, які можна выкарыстаць, гэта sed '/' $ 1 '/ d', але вы павінны быць упэўнены ў паўторным.

        1.    LycusHackerEmo сказаў

          затым скончыце захоўваць яго ў * .odt

          Ці не існуе больш просты спосаб зрабіць гэта з LibreOffice?

  6.   Лола сказаў

    Вы маглі б выдаліць частку радка, а астатняе пакінуць?

    Скажам, я хачу выдаліць усё перад словам у пэўным радку.

    Або выдаліць усё, што ідзе за гэтым словам.

    1.    аса сказаў

      Так, справа ў выцягванні рэгулярнага выраза (пры неабходнасці чалавек sed -r, –regexp-пашыраны)
      Адштурхоўваючыся ад таго, што я знаходжу
      рэха «Роберт: Прывітанне. Змяніце тут »| sed 's / Змяніць //'
      з выразна акрэсленым узорам і с. (адзін сімвал) і * (больш за адзін)
      то:
      рэха «Роберт: Прывітанне. Змяніце тут »| sed 's / Змяніць. * //'
      Перад:
      рэха «Роберт: Прывітанне. Змяніце тут »| sed 's /. * Змяніць //'
      Калі гэта важна, што слова з'яўляецца
      рэха «Роберт: Прывітанне. Змяніце тут »| sed 's / Змена. * / Змена /'
      альбо больш складаныя
      у радку, які змяшчае Роберта, што ідзе пасля змены
      echo -e «Фрыц: Прывітанне. Зменіце тут \ nРоберт: Прывітанне. Змяніце тут »| sed '/Robert/s/Cambio.*//'
      альбо, як на пачатку, дастаньце другі радок і апрацуйце астатняе
      echo -e «Фрыц: Прывітанне. Зменіце тут \ nРоберт: Прывітанне. Змяніце тут \ nІншае »| sed -e 2d -e 's / Змена. * //'
      echo -e «Фрыц: Прывітанне. Зменіце тут \ nРоберт: Прывітанне. Змяніце тут \ nІншае »| sed '2d; s / Змена. * //'

      1.    Лола сказаў

        Дзякуй, гэта мне вельмі карысна.

  7.   MSX сказаў

    Прыемны артыкул, адзін з тых, што мне падабаецца, які выдатны SysAdmin!
    Што было б у нашым жыцці без Sed, Awek, Perl, Grep, хвост, галава, "Emacs" і шмат іншых важных інструментаў?

  8.   Лісбет Оларвес сказаў

    Дзякуй, гэта было вельмі карысна.

  9.   Перні сказаў

    Добры дзень, а як вы маглі выдаліць радкі 1,4 і 10 з файла ў той самай камандзе?