logo

Команда Сед у Линук/Уник-у са примерима

Линук 'сед' команда је скраћеница за стреам едитор. Користи се за уређивање токова (фајлова) користећи регуларне изразе. Али ово уређивање није трајно. Остаје само на екрану, али у стварности садржај датотеке остаје исти.

Првенствено се користи за замену текста; осим тога, може се користити за друге операције манипулације текстом као што су уметање, брисање, претрага и још много тога. Команда сед нам омогућава да уређујемо датотеке без отварања. Подршка за регуларни израз чини га моћнијим алатом за манипулацију текстом.

Преглед сед команде

То је Уник услужни програм који трансформише и анализира текст помоћу компактног и једноставног програмског језика. Интегрисао га је од 1973. до 1974. Лее Е. МцМахон из Белл Лабс-а и данас је присутан за скоро сваки оперативни систем. Команда сед је била заснована на аспектима скриптовања ранијег кед-а (брзи уређивач) и интерактивног уређивача ед. Био је то најранији алат за подршку регуларним изразима и остаје активан за обраду текста, што је најважније са командом за замену. Познати алтернативни алати укључују Перл и АВК за 'уређивање стрима' и манипулација стринговима отвореног текста.

Начин рада сед команде

Команда сед је услужни програм оријентисан на обраду текста: ред по ред чита текст из датотеке или улазног тока у интерни бафер познат као простор шаблона. Сва читања линија почињу циклус. Команда сед користи једну или више операција које су описане сед скриптом у простору шаблона. Он управља програмским језиком користећи око 25 команди које описују операције над текстом.

За све улазне линије, команда сед обично доводи до простора шаблона и поново започиње циклус са следећим редом након извршавања скрипте. Друге природе краја скрипте доступне су из команди скрипте и опција подешавања, на пример, Н да одмах укључи следећи ред у простор шаблона, к да напусти, д да уклони простор шаблона и тако даље. Дакле, сед скрипта се односи на тело петље које се понавља из струјне линије, у којој сед променљива петље и сама петља одржавају и имплицитно.

  • Сед скрипта може бити описана у командној линији или прочитана кроз изоловану датотеку. У сед скрипти, команде могу узети додатну адресу у контексту регуларних израза или бројева редова. Адреса одлучује када ће се команда извршити. На пример, 2д ће извршити само команду д (или делете) на 2. улазној линији, док ће /^ /д уклонити сваки ред који почиње размаком.
  • Простор за чекање, изоловани специјални бафер, може се користити од стране неких сед команди за држање акумулираног текста између циклуса. Командни језик сед-а има само две варијабле (простор узорка и простор за задржавање) и функционалност гранања налик ГОТО-у. Међутим, језик је потпун по Тјурингу. Езотеричне сед скрипте су доступне за неколико игара као што су тетрис, шах, арканоид и сокобан.
  • Главна петља се покреће за све линије улазног тока, проверава сед скрипту на свим линијама улаза. Све линије сед скрипте су пар образац-акција, који представљају образац за упаривање и коју акцију имплементирати, која се може копирати као условна изјава. Подразумеване акције (штампање простора узорка, копирање линије у простор шаблона), улазни и излазни токови и радне варијабле (простор за задржавање и простор шаблона) су имплицитне; могуће је специфицирати сажете једнолинијске програме због главне петље.

Употреба наредбе сед

    Команда замене
    Пример у наставку представља најчешће командну и типичну употребу команде сед, односно замену. Употреба је била стварна мотивација за сед команду:
    сед 'с/регекп/реплацемент/г' инпутФилеНаме > оутпутФилеНамеОстале команде сед
    Могући су и други начини за једноставну обраду са неких 25 сед команди. На пример, у наставку се користи опција д за филтрирање линија које садрже само размаке и крај знака реда:
    сед '/^ *$/д' инпутФилеНаме
    Горњи пример користи неколико метакакова регуларног израза у наставку:
    • Знак (^) је исти као почетак реда.
    • Симбол долара ($) је исти као завршетак линије.
    • Звездица (*) је иста као претходно појављивање више или нула знакова.
    • Симбол плус (+) је исти као један или више претходних знакова.
    • Знак питања (?) је исти као претходни знак више или нула.
    • Симбол тачке (.) је потпуно исти као један знак.
    сед као филтер
    Често се команда сед користи као филтер унутар цевовода под Уник-ом:
    $генератеДата | сед 'с/к/и/г'
    Програм генератеДата генерише податке, а команда сед прави малу промену заменом к уместо и.Сед скрипте засноване на фајловима
    Често је корисно ставити много сед команди, једну команду за сваки ред, унутар датотеке скрипте и користити ознаку -ф за извршавање команди из датотеке:
    сед -ф субст.сед инпутФилеНаме > оутпутФилеНаме

Синтакса:

 sed [OPTION]... {script-only-if-no-other-script} [input-file]... 

Опције:

Следе неке опције командне линије сед команде:

цео број у низ у Јави

-н, --тихо, --тихо: Он нам снажно омогућава да штампамо простор узорка.

-е скрипта, --екпрессион=скрипта: Користи се за додавање скрипте командама које треба извршити.

-ф датотека скрипте, --филе=датотека скрипте: Користи се за додавање садржаја датотеке скрипте командама које треба извршити.

--фоллов-симлинкс: користи се за праћење симболичких веза приликом обраде на месту.

-и[СУФИКС], --на месту[=СУФИКС]: користи се за уређивање датотека на месту (креира резервну копију ако је дата опција СУФФИКС).

-л Н, --лине-ленгтх=Н: Користи се за одређивање жељене дужине прелома линије за команду `л'.

--посик: користи се за онемогућавање свих ГНУ екстензија.

-Е, -р, --регекп-ектендед: Омогућава нам да користимо проширене регуларне изразе у скрипти (за преносивост користите ПОСИКС -Е).

-с, --сепарате: користи се за разматрање датотека као засебних, а не као појединачних и наставља дуги ток.

--сандбок: Користи се за рад у режиму сандбок-а.

-у, --небаферисано: Користи се за учитавање минималних количина података из улазних датотека и чешће испира излазне бафере.

-з, --нулл-подаци: Користи се за раздвајање редова помоћу НУЛ знакова.

--помоћ: користи се за приказ упутства за помоћ.

--верзија: Користи се за приказ информација о верзији.

Примери команде сед

Погледајмо следеће примере:

Примена на СТДИН директоријум

Команда сед није ограничена само на манипулацију датотекама; такође, можемо га применити на СТДИН директоријум.

 echo class7 | sed 's/class/jtp/' echo class7 | sed 's/7/10/' cat msg.txt | sed 's/learn/study/' 

Горе наведене команде ће заменити први текст другим шаблоном текста. Размотрите доњи излаз:

Линук Сед филтер

Из горњег излаза, прво смо извршили команду 'сед' на стрингу 'цласс7' где је 'цласс' промењено у 'јтп' и 7 у 10. Затим смо извршили команду 'сед' у току 'мсг.ткт' ' где се 'учити' претвара у 'проучавати'.

Глобална замена

У претходном примеру, све речи 'учити' нису уређиване у 'студи'. Да бисмо уредили сваку реч, морамо да користимо глобалну замену 'г'. Уредиће све наведене речи у датотеци или низу.

Синтакса:

 command | sed 's///g' 

Размотрите следеће примере:

дугме ткинтер
 echo class7 class9 | sed 's/class/jtp/g' cat msg.txt | sed 's/learn/study/g' 

Горе наведене команде ће заменити све наведене шаблоне текста. Размотрите доњи излаз:

Линук Сед филтер

Из горњег излаза, извршавањем команде 'ецхо цласс7 цласс9 | сед 'с/цласс/јтп/г'' сва 'класа' се конвертује у 'јтп' и командом 'цат мсг.ткт | сед 'с/леарн/студи/г'' све 'учење' је претворено у 'студи'.

Уклањање линије

Опција 'д' ће нам омогућити да уклонимо цео ред из датотеке. Потребно је само да наведемо реч из тог реда са опцијом 'д' и тај ред ће бити избрисан. Али, имајте на уму да ће сви редови који имају исту реч бити избрисани. Изводиће се као:

 cat | sed '//d' 

Размотрите доњу команду:

 cat msg.txt | sed '/jtp/d' 

Горња команда ће избрисати редове који садрже реч 'јтп'. Размотрите доњи излаз:

Линук Сед филтер

Из горњег излаза, извршавањем команде 'цат мсг.ткт | сед '/јтп/д'' сви редови који садрже реч 'јтп' се бришу.

Коришћење команде Мултипле сед

Опција '-е' нам омогућава да извршимо више сед команди одједном. Можемо извршити више од једне сед операције извршавањем команде као:

 sed -e ' ; ' 

Размотрите доњу команду:

 sed -e 's/red/blue/; s/yellow/black/' exm.txt 

Горња команда ће применити све наведене операције у датотеци 'екм.ткт'. Размотрите доњи излаз:

Линук Сед филтер

Као што видимо из горњег излаза, све 'црвене' речи су замењене са 'плавим', а све 'жуте' речи су замењене са 'црним'. Такође можемо одвојити команде попут ове:

снег против леда
 sed -e ' >s/red/blue/; >s/yellow/black/' exm.txt 

Резултат ће бити исти као у горњој команди.

Читање команди из датотеке

Можемо да сачувамо сед команде у датотеци и применимо их одједном у било којој датотеци. То се може урадити навођењем опције '-ф' на следећи начин:

 sed -f 

Из горње команде, '' је датотека која има листу команди сед. Размотрите доњу команду:

 sed -f SedCommands exm.txt 

Горња команда ће применити све наведене команде у датотеци 'СедЦомманд' на 'екм.ткт'. Размотрите доњи излаз:

Линук Сед филтер

Из горњег излаза, користили смо команде примењене на претходни пример. Дакле, излаз је исти као у претходном примеру.

Замена знакова

Можемо користити узвичник (!) као граничник низа. На пример, желимо да заменимо басх љуску и да је заменимо цсх шкољком у '/етц/пассвд'. Да бисте то урадили, извршите следећу команду:

 sed 's//bin/bash//bin/csh/' /etc/passwd 

Исти резултат можемо постићи извршавањем наредбе испод:

 sed 's!/bin/bash!/bin/csh!' /etc/passwd 

Ограничавање сед

Основна употреба наредбе сед обрађује целу датотеку. Али, можемо ограничити команду сед и одредити било коју линију. Постоје два начина да ограничите команду сед:

  • Низ линија.
  • Образац који одговара одређеној линији.

Можемо да обезбедимо број за навођење линије на следећи начин:

 sed '3s/Red/Blue/' exm.txt 

Горња команда ће применити наведену операцију у трећем реду. Размотрите доњи излаз:

Линук Сед филтер

Из горњег излаза, модификована је само линија три.

Такође можемо одредити опсег линија. Да бисте навели опсег линија, извршите наредбу на следећи начин:

 sed '1,3s/Red/Blue/' exm.txt 

Горња команда ће ажурирати наведени текст у редовима 1 и 3. Размотрите доњи излаз:

Линук Сед филтер

Уметање и додавање текста

Ознаке 'и' и 'а' се користе за уметање и додавање текста у датотеку. Ознака 'и' ће додати текст пре стринга, а 'а' заставица се користи за додавање текста после низа. Размотрите доњу команду:

 echo 'Another Demo' | sed 'iFirst Demo' 

Горња команда ће уметнути текст испред текста 'Још један демо'. Размотрите доњи излаз:

Линук Сед филтер

Да бисте додали текст, извршите наредбу на следећи начин:

 echo 'Another Demo' | sed 'aFirst Demo' 

Горња команда ће додати текст. Размотрите доњи излаз:

Линук Сед филтер

Модификовање линија

Ознака 'ц' се користи за модификацију одређене линије. Да бисте изменили линију, извршите наредбу на следећи начин:

 sed '3cThis is a modified line.' exm.txt 

Горња команда ће ажурирати ред три. Размотрите доњи излаз:

колико градова у Сједињеним Америчким Државама
Линук Сед филтер

Такође можемо да користимо регуларни израз да ажурирамо више од једне линије које имају исти образац. Размотрите доњу команду:

 sed '/Apple is /c Line updated.' exm.txt 

Горња команда ће ажурирати све редове са стрингом „Аппле ис“. Размотрите доњи излаз:

Линук Сед филтер

Трансформација ликова

Ознака 'и' се користи за трансформацију знакова. Трансформација знакова се не може ограничити на одређене појаве. Да бисте трансформисали знакове, извршите наредбу на следећи начин:

 sed 'y/abc/def/' exm.txt 

Горња команда ће трансформисати знакове 'а', 'б', 'ц' у 'д', 'е', 'ф'. размотрите следећи излаз:

Линук Сед филтер

Штампање бројева линија

Знак '=' се користи за штампање броја реда. Да бисте одштампали број реда, извршите наредбу на следећи начин:

 sed '=' exm.txt 

Горња команда ће приказати број реда садржаја датотеке. Размотрите доњи излаз:

Линук Сед филтер

Знак једнакости са опцијом '-н' одређује број реда који садржи одговарајући скрипт. Размотрите доњи излаз:

 sed -n '/mango/=' exm.txt 

Горња команда ће приказати број реда који садржи реч 'манго'. Размотрите доњи излаз:

Линук Сед филтер

Из горњег излаза, можемо видети да ред број 2 има реч „манго“.