Sed көмегімен файлдан нақты жолдарды қалай жоюға болады

Белгілі бір жағдайларда біз файлдан немесе бірнеше жолдан белгілі бір жолды өшіруіміз керек, мысалы менде файлдардың толық тізімі болған және мен бұлардың # 27-жолын өшіруім керек болды (№27 жол - ACL жолдары) , норма, ереже, конфигурация), немесе мен файлды файл бойынша өңдей аламын немесе команданы пайдаланып өзіме қажет нәрсеге қол жеткізе аламын sed және бас сценарийі (міндетті емес).

Бір файлды қарапайым етіп көрейік.

Бізде файл бар distros-deb.txt онда мыналар бар:

Debian

kubuntu

archlinux

солустар

жалбыз

Басқаша айтқанда, файл distros-deb.txt онда біз Дебианға негізделген дистрибьюторларды қоямыз, бірақ онда біз №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

Бұл маған тек дебиан мен кубунтуды көрсетеді will

Сонымен, егер мен жалпы жолдарды білмесем, 2-жолдан соңғысына дейін жойғым келсе ше?

Тек доллар белгісін - »$ пайдаланыңыз

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

Егер сіз бірінші жолдан № 4-ке дейін алып тастағыңыз келсе, онда біз 1 мәнін басында қоямыз:

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

Тапсырмаларды автоматтандыру үшін бас сценарийлерін жасағыңыз келген кезде бұл өте пайдалы кеңес болды және конфигурация файлдарының жолдарын өзгерту және жою қажет, өзгерту үшін біз қолдана аламыз sed o перл, сонымен қатар жою үшін біз sed 😉 көмегімен қалай жасау керектігін білеміз

тілекпен


16 пікір, өз пікіріңізді қалдырыңыз

Пікіріңізді қалдырыңыз

Сіздің электрондық пошта мекен-жайы емес жарияланады. Міндетті өрістер таңбаланған *

*

*

  1. Деректерге жауапты: Мигель Анхель Гатан
  2. Деректердің мақсаты: СПАМ-ны басқару, түсініктемелерді басқару.
  3. Заңдылық: Сіздің келісіміңіз
  4. Деректер туралы ақпарат: заңды міндеттемелерді қоспағанда, деректер үшінші тұлғаларға жіберілмейді.
  5. Деректерді сақтау: Occentus Networks (ЕО) орналастырған мәліметтер базасы
  6. Құқықтар: Сіз кез-келген уақытта ақпаратты шектей, қалпына келтіре және жоя аласыз.

  1.   mss-девел дижо

    Өте жақсы үлес 😉

    1.    KZKG ^ Гаара дижо

      Рахмет

      Айтпақшы, біз сіздің электрондық поштаңызды дәл қазір алдық, мен сізге жауап беремін 😀

      тілекпен

  2.   белгісіз дижо

    Сізге терминалдың, серверлердің және ssh байланыстарының бас діни қызметкері ретінде келемін, керемет KZKG ^ Gaara, және мен сізден сұраймын: мен надандық деңгейінде оқулықты қай жерден алуға болады, бұл әр түрлі желілердегі қашықтағы екі машинаның арасындағы ssh байланысын пайдалануға мүмкіндік береді. мәтіндік файлдар, PDF, сурет және дыбыс (mp3)….

    🙂

    Шынымен, маған осы мәселе бойынша басшылық бере аласыз ба, менің екі машинам бар, біреуі жұмыста, екіншісі үйде және маған олардың арасында ssh байланысы қажет (өйткені мен түсінгенімдей, ssh мазмұнды машиналар арасында бөлуге мүмкіндік береді, менікі дұрыс па?).
    Ал егер мен қателессем, қандай қосымша қолдануға кеңес бересіз?
    Осыған байланысты негізгі оқулықты қайдан табамын?

    1.    -шпикер- дижо

      scp

      scp user @ machine_address: path user @ machine_address: жол.

      Cp синтаксисімен бірдей, көзі -> тағайындау.

  3.   f3niX дижо

    Сіз адамды көрсеттіңіз, сіз адасып кеттіңіз.

  4.   Joaquin дижо

    Жақсы кеңес!

  5.   LycusHackerEmo дижо

    Қызықты кеңес ... xD

    Сіз қалың мәтінді ерекше етіп көрсететін біреуін білесіз бе?
    Менің айтайын дегенім, txt файлы бар, ол сөздік болып табылады, оның 10000 XNUMX-нан астам жолдары бар және оны белгілі бір мәтінді «:» тоқтата тұру нүктесінен бұрын бөліп көрсету керек және оны бір-бірлеп орындау өте көп.

    1.    KZKG ^ Гаара дижо

      сәлем,

      Txt файлы - бұл жай мәтін, оның аты айтып тұрғандай ... қарапайым, форматсыз немесе басқа ешнәрсе жоқ, кешіріңіз, бірақ менің ойымша, сіз не істей аласыз, солай емес пе? 🙁

      тілекпен

      1.    aca дижо

        бұл мүмкін, бірақ сіз баратын форматты білуіңіз керек.
        мысалы:
        echo $ (echo «Роберт: Сәлем. Мұнда өзгерт» | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
        бұл қиындықты жеңу мәселесі.
        жоюдың басқа әдісі sed '/' $ 1 '/ d' болып табылады, бірақ сіз бұған сенімді болуыңыз керек.

        1.    LycusHackerEmo дижо

          содан кейін оны * .odt-де сақтауды аяқтаңыз

          Мұны LibreOffice көмегімен жасаудың оңай жолы жоқ па?

  6.   Lolo дижо

    Сіз жолдың бір бөлігін өшіріп, қалғанын қалдыра аласыз ба?

    Айталық, мен белгілі бір қатардағы сөздің алдында бәрін жойғым келеді.

    Немесе осы сөзден кейінгілердің барлығын өшіріңіз.

    1.    aca дижо

      Ия, бұл регексті тарту туралы мәселе (қажет болса, man sed -r, –regexp-Extended)
      Менің тапқанымнан бастаймын
      жаңғырық «Роберт: Сәлеметсіз бе. Мұнда өзгерту »| sed 's / Change //'
      жақсы белгіленген үлгісімен және. (бір таңба) және * (бірнеше)
      Кейін:
      жаңғырық «Роберт: Сәлеметсіз бе. Мұнда өзгерту »| sed 's / Change. * //'
      Антес:
      жаңғырық «Роберт: Сәлеметсіз бе. Мұнда өзгерту »| sed 's /. * Change //'
      Егер бұл сөздің пайда болуы маңызды болса
      жаңғырық «Роберт: Сәлеметсіз бе. Мұнда өзгерту »| sed 's / Change. * / Change /'
      немесе нақтырақ
      Роберт бар жолда Өзгерістерден кейін не болады
      echo -e «Fritz: Сәлеметсіз бе. Мұнда өзгертіңіз \ nРоберт: сәлем. Мұнда өзгерту »| sed '/Robert/s/Cambio.*//'
      немесе басында сияқты екінші жолды шығарып, қалғанын өңдеңіз
      echo -e «Fritz: Сәлеметсіз бе. Мұнда өзгертіңіз \ nРоберт: сәлем. Мұнда өзгертіңіз \ nБасқасы »| sed -e 2d -e 's / Change. * //'
      echo -e «Fritz: Сәлеметсіз бе. Мұнда өзгертіңіз \ nРоберт: сәлем. Мұнда өзгертіңіз \ nБасқасы »| sed '2d; s / Change. * //'

      1.    Lolo дижо

        Рахмет, бұл маған өте пайдалы.

  7.   msx дижо

    Маған ұнайтын жағымды мақала, SysAdmin қандай керемет!
    Біздің өміріміз sed, awek, perl, grep, tail, head, «Emacs» және басқа да көптеген қажетті құралдарсыз қалай болар еді?

  8.   Лисбет Олларвес дижо

    Рахмет, бұл өте пайдалы болды.

  9.   Перни дижо

    Сәлеметсіз бе, және 1,4 және 10-жолдарды сол командадағы файлдан қалай жоюға болады?