Pri určitých príležitostiach musíme vymazať konkrétny riadok zo súboru alebo z viacerých, napríklad sa mi stalo, že som mal celý zoznam súborov a musím vymazať riadok 27 všetkých týchto (riadok 27 je ten, že ACL, norma, pravidlo, konfigurácia), môžem buď editovať súbor po súbore, alebo len dosiahnem to, čo potrebujem, pomocou príkazu smäd a bash skript (voliteľný).
Vyskúšajme však trochu jednoduchý súbor.
Máme spis distros-deb.txt ktorý obsahuje toto:
debian
kubuntu
Arch Linux
solúzy
mäta
Inými slovami spis distros-deb.txt je miesto, do ktorého vložíme distribúcie založené na Debiane, ale vidíme, že v riadku 3 je „archlinux“, distro, ktoré zjavne nemá nič spoločné s Debianom, takže musíme tento riadok vylúčiť. Aby sme vylúčili riadok 3 tohto súboru, vložíme nasledovné:
sed "3d" distros-deb.txt > distros-deb-ok.txt
Vysvetlenie tohto riadku je trochu jednoduché smädný „3d“ naznačujeme, že odstránime riadok # 3 s distros-deb.txt Označíme, na ktorom súbore máme pracovať, to znamená, že vymažeme riadok č. 3 tohto súboru, až sem stlačíme Enter, ukáže nám, čo chceme, ale v termináli, > distros-deb-ok.txt naznačujeme, že namiesto zobrazenia výsledku v termináli ho vložil do súboru s týmto názvom.
Čo je jednoduché?
Tiež sa môžeme vyhnúť použitiu > distros-deb-ok.txt pomocou správneho parametra smäd, parameter -i
To znamená, že ak chceme zo súboru odstrániť riadok a uložiť ho s rovnakým názvom (a nie do iného súboru), jednoducho pridáme parameter -i :
sed -i "3d" distros-deb.txt
Týmto sa odstráni riadok č. 3 z distros-deb.txt a uloží sa.
Čo ak chcem rozsah riadkov, to znamená odstránenie riadku # 3, ale aj # 4 a # 5? Aby sme to dosiahli, dali sme rozsah od 3 do 5, to znamená:
sed -i "3,5d" distros-deb.txt
A ukáže mi to iba debian a kubuntu 😀
No a čo ak chcem vymazať z riadku 2 do posledného, keď neviem súčet riadkov?
Stačí použiť symbol dolára - »$
sed -i "2,$d" distros-deb.txt
Ak chcete vylúčiť z prvého riadku na # 4, potom jednoducho dáme hodnotu 1 na začiatok:
sed -i "1,4d" distros-deb.txt
To bolo všetko, veľmi užitočný tip, keď chcete vytvárať bash skripty na automatizáciu úloh a potrebujete upraviť a vylúčiť riadky konfiguračných súborov, ktoré môžeme použiť smäd o perl, ako aj na elimináciu už vieme, ako na to so sed 😉
pozdravy
Veľmi dobrý príspevok 😉
Ďakujem vám
Mimochodom, váš e-mail sme dostali práve teraz, odpoviem vám 😀
pozdravy
Ako veľkňaz terminálu, serverov a pripojení ssh k vám prichádzam, ó, skvelé KZKG ^ Gaara, a pýtam sa vás: kde získam návod na úrovni mojej nevedomosti, ktorý mi umožňuje používať ssh spojenie medzi dvoma vzdialenými strojmi v rôznych sieťach zdieľať textové súbory, pdf, obrázky a zvuk (mp3)….
????
Vážne, mohli by ste ma v tomto smere usmerniť, mám dva stroje, jeden v práci a jeden doma a potrebujem medzi nimi spojenie ssh (pretože ako to chápem, ssh umožňuje zdieľanie obsahu medzi strojmi, mám pravdu? ).
A ak sa mylim, aku aplikaciu odporucate?
A kde nájdem v tejto súvislosti základný návod?
scp
scp user @ machine_address: cesta user @ machine_address: cesta.
Rovnaká syntax ako cp, zdroj -> cieľ.
Ukázal si človeka, bol si stratený.
Dobrý tip!
Zaujímavý tip ... xD
Poznáte náhodou taký, vďaka ktorému vynikne tučný text?
Myslím, že mám súbor txt, ktorý je slovníkom, má viac ako 10000 XNUMX riadkov a chcem, aby zvýraznil určitý text pred bodmi pozastavenia „:“ a robiť jeden po druhom je príliš veľa.
Dobrý deň,
Súbor txt je obyčajný text, ako už z názvu vyplýva ... prostý, bez formátov alebo podobného, je mi ľúto, ale myslím si, že to, čo sa pýtate, sa nedá urobiť, však? 🙁
pozdravy
vlastne to môže, ale museli by ste poznať cieľový formát.
napr .:
echo $ (echo "Robert: Hello. Change here" | sed 's / \ ./. \\ e [40; 31 m /; s / \: /: \\ e [40; 35 m /')
je to otázka zvládnutia.
ďalším spôsobom odstránenia, ktorý je možné použiť, je sed '/' $ 1 '/ d', musíte si však byť istí re.
potom dokončite uloženie v * .odt
Nie je ľahší spôsob, ako to urobiť pomocou LibreOffice?
Mohli by ste odstrániť časť riadku a zvyšok nechať?
Povedzme, že chcem vymazať všetko pred slovom v určitom riadku.
Alebo vymažte všetko, čo nasleduje za týmto slovom.
Áno, ide o vytiahnutie regulárneho výrazu (v prípade potreby človek sed -r, –regexp-extended)
Počnúc tým, čo nájdem
ozvena «Robert: Dobrý deň. Zmeniť tu »| sed 's / Zmeniť //'
s presne určeným vzorom a s. (jeden znak) a * (viac ako jeden)
potom:
ozvena «Robert: Dobrý deň. Zmeniť tu »| sed 's / Zmeniť. * //'
Pred:
ozvena «Robert: Dobrý deň. Zmeniť tu »| sed 's /. * Zmeniť //'
Ak je to dôležité, slovo sa objaví
ozvena «Robert: Dobrý deň. Zmeniť tu »| sed 's / Zmena. * / Zmena /'
alebo zložitejšie
v riadku obsahujúcom Roberta, čo nasleduje po zmene
echo -e «Fritz: Dobrý deň. Zmeniť tu \ nRobert: Dobrý deň. Zmeniť tu »| sed '/Robert/s/Cambio.*//'
alebo ako na začiatku vytiahnite druhý riadok a spracujte zvyšok
echo -e «Fritz: Dobrý deň. Zmeniť tu \ nRobert: Dobrý deň. Zmeniť tu \ nĎalšie »| sed -e 2d -e 's / Zmeniť. * //'
echo -e «Fritz: Dobrý deň. Zmeniť tu \ nRobert: Dobrý deň. Zmeniť tu \ nĎalšie »| sed '2d; s / Zmeniť. * //'
Ďakujem, je to pre mňa veľmi užitočné.
Pekný článok, tie, ktoré sa mi páčia, aký skvelý je SysAdmin!
Aký by bol náš život bez sed, awek, perl, grep, tail, head, „Emacs“ a toľkých ďalších základných nástrojov!?
Ďakujem, bolo to veľmi užitočné.
Dobrý deň, a ako by ste mohli vymazať zo súboru riadky 1,4 a 10 v rovnakom príkaze?