Dažos gadījumos mums ir jāizdzēš konkrēta rinda no faila vai vairāki, piemēram, man ir gadījies, ka man ir bijis vesels failu saraksts, un man ir jāizdzēš 27. rinda no visiem šiem (27. rindiņa ir tāda, ka (ACL, norma, noteikums, konfigurācija), es varu vai nu rediģēt failu pēc faila, vai arī varu vienkārši sasniegt nepieciešamo, izmantojot komandu slāpes un bash skripts (pēc izvēles).
Mēģināsim nedaudz vienkāršu failu.
Mums ir fails distros-deb.txt kas satur šo:
Debian
kubuntu
Archlinux
solus
piparmētra
Citiem vārdiem sakot, fails distros-deb.txt ir tas, kurā mēs ievietosim Debian balstītas distros, bet tur mēs redzam, ka 3. rindā ir "archlinux", distro, kam acīmredzami nav nekāda sakara ar Debian, tāpēc mums šī līnija ir jānovērš. Lai novērstu šī faila 3. rindiņu, mēs ievietosim:
sed "3d" distros-deb.txt > distros-deb-ok.txt
Izskaidrot šo rindu ir nedaudz viegli, izmantojot slāpes "3d" mēs norādām, ka izdzēsīsim 3. rindiņu ar distros-deb.txt Mēs norādām, pie kura faila strādāt, tas ir, izdzēsiet šī faila 3. rindiņu, līdz šeit, ja mēs nospiedīsim Enter, tas mums parādīs, ko mēs vēlamies, bet terminālā, tāpēc ar > distros-deb-ok.txt mēs norādām, ka tā vietā, lai parādītu rezultātu terminālā, to ievieto failā ar šo nosaukumu.
Kas ir vienkāršs?
Tāpat mēs varam izvairīties no > distros-deb-ok.txt izmantojot pareizu parametru slāpes, parametrs -i
Tas ir, ja mēs vēlamies izdzēst līniju no faila un saglabāt to ar tādu pašu nosaukumu (nevis citā failā), vienkārši pievienojiet parametru -i :
sed -i "3d" distros-deb.txt
Tas noņems 3. līniju no distros-deb.txt un saglabās to.
Ko darīt, ja es vēlos virkni līniju, tas ir, noņemt 3. līniju, bet arī 4. un 5. līniju? Lai to panāktu, mēs ievietojam diapazonu no 3 līdz 5, tas ir:
sed -i "3,5d" distros-deb.txt
Un tas man parādīs tikai debian un kubuntu 😀
Ko darīt, ja es vēlos izdzēst no 2. rindas uz pēdējo, kad nezinu kopējo rindu skaitu?
Vienkārši izmantojiet dolāra simbolu - »$
sed -i "2,$d" distros-deb.txt
Gadījumā, ja vēlaties izslēgt no pirmās rindas uz # 4, tad sākumā vienkārši ievietojam vērtību 1:
sed -i "1,4d" distros-deb.txt
Tas ir bijis viss, ļoti noderīgs padoms, kad vēlaties izveidot bash skriptus, lai automatizētu uzdevumus, un jums ir jāpārveido un jānoņem konfigurācijas failu rindas, lai modificētu, ko mēs varam izmantot slāpes o Perl, kā arī lai novērstu, mēs jau zinām, kā to izdarīt ar sed 😉
Sveicieni
Ļoti labs ieguldījums 😉
Paldies
Starp citu, mēs tūlīt saņēmām jūsu e-pastu, es jums atbildu 😀
Sveicieni
Kā termināļa, serveru un ssh savienojumu augstais priesteris, es nāku pie jums, ak, lieliski, KZKG ^ Gaara, un es jums jautāju: kur es varu iegūt apmācību savas nezināšanas līmenī, kas ļauj man izmantot ssh savienojumus starp divām attālajām mašīnām dažādos tīklos, lai koplietotu teksta failus, pdf, attēlu un skaņu (mp3) ...
????
Nopietni, vai jūs varētu mani vadīt šajā sakarā, man ir divas mašīnas, viena darbā un viena mājās, un man starp tām ir nepieciešams ssh savienojums (jo, kā es saprotu, ssh ļauj saturu koplietot starp mašīnām, vai es kļūdos?
Un, ja es kļūdos, kādu lietojumprogrammu jūs iesakāt?
Un kur es varu atrast pamata apmācību šajā sakarā?
scp
scp user @ machine_address: ceļš user @ machine_address: ceļš.
Tāda pati sintakse kā cp, avots -> galamērķis.
Jūs parādījāt cilvēku, jūs esat apmaldījies.
Labs padoms!
Interesants padoms ... xD
nejauši jūs nezināt tādu, kas izceļ treknraksta tekstu?
Es domāju, ka man ir txt fails, kas ir vārdnīca, tajā ir vairāk nekā 10000 XNUMX rindiņu, un es vēlos, lai tas izceļ noteiktu tekstu pirms ":" punktu apturēšanas un to izdarīšanas pa vienam ir par daudz.
Hello,
Txt fails ir vienkāršs teksts, kā norāda nosaukums ... vienkāršs, bez formātiem vai līdzīga, piedodiet, bet es domāju, ka to, ko jūs lūdzat, nevar izdarīt, vai ne? 🙁
Sveicieni
patiesībā tā var, bet jums būtu jāzina galamērķa formāts.
piem .:
echo $ (atbalss "Roberts: Sveiki. Mainies šeit" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
tas ir tikt galā.
otrs izdzēšanas veids, ko var izmantot, ir sed '/' $ 1 '/ d', taču jums ir jābūt pārliecinātam par re.
tad pabeidziet to saglabāt mapē * .odt
Vai nav vienkāršāka veida, kā to izdarīt ar LibreOffice?
Vai jūs varētu izdzēst daļu no līnijas un atstāt pārējo?
Pieņemsim, ka es gribu izdzēst visu vārda priekšā noteiktā rindā.
Vai arī izdzēsiet visu, kas seko šim vārdam.
Jā, tas ir regex (ja nepieciešams, cilvēks sed -r, –regexp-pagarināts) vilkšana
Sākot no tā, ko atrodu
atbalss «Roberts: Sveiks. Mainīt šeit »| sed 's / Change //'
ar precīzi definētu modeli un ar. (viena rakstzīme) un * (vairāk nekā viena)
Pēc:
atbalss «Roberts: Sveiks. Mainīt šeit »| sed 's / Change. * //'
Pirms:
atbalss «Roberts: Sveiks. Mainīt šeit »| sed 's /. * Mainīt //'
Ja ir svarīgi, ka vārds parādās
atbalss «Roberts: Sveiks. Mainīt šeit »| sed 's / Mainīt. * / Mainīt /'
vai sarežģītāk
rindā, kurā ir Roberts, kas notiek pēc pārmaiņām
atbalss -e «Fritz: Sveiks. Mainīt šeit \ nRobert: Labdien. Mainīt šeit »| sed '/Robert/s/Cambio.*//'
vai tāpat kā sākumā izņem otro rindu un pārējo apstrādā
atbalss -e «Fritz: Sveiks. Mainīt šeit \ nRobert: Labdien. Mainīt šeit \ nCits »| sed -e 2d -e 's / Mainīt. * //'
atbalss -e «Fritz: Sveiks. Mainīt šeit \ nRobert: Labdien. Mainīt šeit \ nCits »| sed '2d; s / Mainīt. * //'
Paldies, tas man ir ļoti noderīgs.
Jauks raksts, kurš man patīk, cik lielisks SysAdmin!
Kāda būtu mūsu dzīve bez sed, awek, perl, grep, astes, galvas, "Emacs" un tik daudziem citiem būtiskiem instrumentiem!
Paldies, tas bija ļoti noderīgi.
Sveiki, un kā jūs varētu izdzēst no faila 1,4 un 10 rindām vienā komandā?