Како да избришете специфични линии од датотека користејќи sed

Во одредени прилики треба да избришеме одредена линија од датотека или неколку, на пример, ми се случи да имам цел список на датотеки и треба да ја избришам линијата # 27 од сите овие (линијата # 27 е таа на ACL , норма, правило, конфигурација), можам или да уредувам датотека по датотека или можам само да го постигнам она што ми треба со помош на командата жед и баш-скрипта (по избор).

Но, ајде да пробаме една датотека малку едноставна.

Ние ја имаме датотеката distros-deb.txt што го содржи ова:

Debian

кубунту

archlinux

солуси

нане

Со други зборови, датотеката distros-deb.txt е во која ќе ги ставиме дистрибуциите засновани на Дебијан, но таму гледаме дека во линијата # 3 има „архлинукс“, дистрибуција што очигледно нема никаква врска со Дебијан, затоа мораме да ја елиминираме таа линија. За да ја елиминираме линијата # 3 од таа датотека, ќе го ставиме следново:

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

Објаснувањето на оваа линија е нешто лесно, со жеден „3д“ укажуваме дека ќе ја избришеме линијата # 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

Ова е сè, многу корисен совет кога сакате да направите баш-скрипти за автоматизирање на задачите и треба да ги измените и елиминирате линиите со конфигурациските датотеки, за да ги измените што можеме да ги користиме жед o перл, како и да ги елиминираме ние веќе знаеме како да го направиме тоа со sed

Со почит


Содржината на статијата се придржува до нашите принципи на уредничка етика. За да пријавите грешка, кликнете овде.

16 коментари, оставете ги вашите

Оставете го вашиот коментар

Вашата е-маил адреса нема да бидат објавени. Задолжителни полиња се означени со *

*

*

  1. Одговорен за податоците: Мигел Анхел Гатон
  2. Цел на податоците: Контролирајте СПАМ, управување со коментари.
  3. Легитимација: Ваша согласност
  4. Комуникација на податоците: Податоците нема да бидат соопштени на трети лица освен со законска обврска.
  5. Складирање на податоци: База на податоци хостирани од Occentus Networks (ЕУ)
  6. Права: Во секое време можете да ги ограничите, вратите и избришете вашите информации.

  1.   мс-развие dijo

    Многу добар придонес

    1.    КЗКГ ^ Гаара dijo

      Ви благодарам

      Патем, ја добивме вашата е-пошта сега ќе ви одговорам

      Со почит

  2.   безимени dijo

    Како врховен свештеник на терминалот, серверите и ssh врските, доаѓам кај тебе, одличен KZKG ^ Гаара, и те прашувам: каде можам да добијам туторијал на ниво на мое незнаење што ми овозможува да користам ssh врски помеѓу две далечински машини во различни мрежи за споделување текстуални датотеки, pdf, слика и звук (mp3).

    🙂

    Сериозно, дали можете да ме водите во врска со ова, имам две машини, една на работа и една дома и ми треба ssh врска меѓу нив (затоа што, како што јас разбирам, ssh дозволува споделување на содржина помеѓу машините, нели?).
    И, ако грешам, каква апликација препорачувате?
    И каде најдам основно упатство за овој поглед?

    1.    -пајкер- dijo

      СКП

      корисник на scp @ адреса на машина: корисник на патека @ машина на адреса: патека.

      Иста синтакса како cp, извор -> дестинација.

  3.   f3niX dijo

    Се појави човек, се изгуби.

  4.   Жоакин dijo

    Добар совет!

  5.   LycusHackerEmo dijo

    Интересен совет… xD

    Дали случајно познавате еден што го истакнува задебелениот текст?
    Мислам, имам txt-датотека што е речник, има повеќе од 10000 редови и сакам да истакне одреден текст пред точките на суспензија ":" и да се направи тоа една по една е премногу.

    1.    КЗКГ ^ Гаара dijo

      Здраво,

      Txt-датотеката е обичен текст, како што подразбира и неговото име ... обичен, без формати или нешто слично, извинете, но мислам дека тоа што го прашувате не може да се направи, нели? 🙁

      Со почит

      1.    aca dijo

        всушност може, но ќе мора да го знаете форматот на дестинацијата.
        на пр:
        ехо $ (ехо "Роберт: Здраво. Промени тука" | sed / s / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m / '])
        прашање е да се поминеме.
        другиот начин за бришење што може да се користи е sed '/' $ 1 '/ d', но мора да бидете сигурни во реализацијата.

        1.    LycusHackerEmo dijo

          потоа завршете го зачувувањето во * .odt

          Нема ли полесен начин да го направите тоа со LibreOffice?

  6.   lolo dijo

    Може ли да избришете дел од линија и да го оставите остатокот?

    Да речеме дека сакам да избришам сè пред збор во одреден ред.

    Или избришете сè што следи по тој збор.

    1.    aca dijo

      Да, тоа е прашање на повлекување на регекс (ако е потребно човек sed -r, -regexp-продолжен)
      Почнувајќи од она што го наоѓам
      ехо «Роберт: Здраво. Променете тука »| sed / s / Промена // '
      со добро дефинирана шема и со. (еден лик) и * (повеќе од еден)
      После:
      ехо «Роберт: Здраво. Променете тука »| sed / s / Промена. * // '
      Пред:
      ехо «Роберт: Здраво. Променете тука »| sed 's /. * Промена //'
      Ако е важно зборот да се појави
      ехо «Роберт: Здраво. Променете тука »| sed / s / Промена. * / Change / '
      или повеќе елаборат
      во редот што го содржи Роберт што оди по промената
      ехо -е «Фриц: Здраво. Променете тука \ n Роберт: Здраво. Променете тука »| sed '/Robert/s/Cambio.*//'
      или како на почетокот извадете ја втората линија и обработете го остатокот
      ехо -е «Фриц: Здраво. Променете тука \ n Роберт: Здраво. Променете тука \ nДруго »| sed -e 2d -e's / Промена. * // '
      ехо -е «Фриц: Здраво. Променете тука \ n Роберт: Здраво. Променете тука \ nДруго »| sed '2d; s / Change. * //'

      1.    lolo dijo

        Ви благодарам, тоа е многу корисно за мене.

  7.   MSX dijo

    Убав напис, од кој ми се допаѓа, колку е одличен SysAdmin!
    Каков би бил нашиот живот без sed, awek, perl, grep, опашка, глава, „Emacs“ и многу други основни алатки!

  8.   Лисбет Оларвес dijo

    Благодарам, беше многу корисно.

  9.   Перни dijo

    Здраво, и како можеше да ги избришеш линиите 1,4 и 10 од датотека во истата команда?