Во одредени прилики треба да избришеме одредена линија од датотека или неколку, на пример, ми се случи да имам цел список на датотеки и треба да ја избришам линијата # 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 коментари, оставете ги вашите
Многу добар придонес
Ви благодарам
Патем, ја добивме вашата е-пошта сега ќе ви одговорам
Со почит
Како врховен свештеник на терминалот, серверите и ssh врските, доаѓам кај тебе, одличен KZKG ^ Гаара, и те прашувам: каде можам да добијам туторијал на ниво на мое незнаење што ми овозможува да користам ssh врски помеѓу две далечински машини во различни мрежи за споделување текстуални датотеки, pdf, слика и звук (mp3).
🙂
Сериозно, дали можете да ме водите во врска со ова, имам две машини, една на работа и една дома и ми треба ssh врска меѓу нив (затоа што, како што јас разбирам, ssh дозволува споделување на содржина помеѓу машините, нели?).
И, ако грешам, каква апликација препорачувате?
И каде најдам основно упатство за овој поглед?
СКП
корисник на scp @ адреса на машина: корисник на патека @ машина на адреса: патека.
Иста синтакса како cp, извор -> дестинација.
Се појави човек, се изгуби.
Добар совет!
Интересен совет… xD
Дали случајно познавате еден што го истакнува задебелениот текст?
Мислам, имам txt-датотека што е речник, има повеќе од 10000 редови и сакам да истакне одреден текст пред точките на суспензија ":" и да се направи тоа една по една е премногу.
Здраво,
Txt-датотеката е обичен текст, како што подразбира и неговото име ... обичен, без формати или нешто слично, извинете, но мислам дека тоа што го прашувате не може да се направи, нели? 🙁
Со почит
всушност може, но ќе мора да го знаете форматот на дестинацијата.
на пр:
ехо $ (ехо "Роберт: Здраво. Промени тука" | sed / s / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m / '])
прашање е да се поминеме.
другиот начин за бришење што може да се користи е sed '/' $ 1 '/ d', но мора да бидете сигурни во реализацијата.
потоа завршете го зачувувањето во * .odt
Нема ли полесен начин да го направите тоа со LibreOffice?
Може ли да избришете дел од линија и да го оставите остатокот?
Да речеме дека сакам да избришам сè пред збор во одреден ред.
Или избришете сè што следи по тој збор.
Да, тоа е прашање на повлекување на регекс (ако е потребно човек 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. * //'
Ви благодарам, тоа е многу корисно за мене.
Убав напис, од кој ми се допаѓа, колку е одличен SysAdmin!
Каков би бил нашиот живот без sed, awek, perl, grep, опашка, глава, „Emacs“ и многу други основни алатки!
Благодарам, беше многу корисно.
Здраво, и како можеше да ги избришеш линиите 1,4 и 10 од датотека во истата команда?