Примери Басх Сед

Bash Sed Examples



Басх вам омогућава да извршите замену шаблона користећи променљиво проширење као што је ($ {вар/паттерн/реплацемент}). И тако, ради ли се сед овако (сед -е ‘с/паттерн/реплацемент/’). Међутим, сед има више од замене образаца у текстуалним датотекама. Овде ћемо поново открити сед, на пример, са еквивалентним командама и токовима рада за помоћ у свакодневним задацима.

Подешавање примера сед

Ево кратког водича за постављање примера, који ћу покушати да не претјерам.







речије текстуална датотека која садржи бројеве од 1 до 100. Ако нисте сигурни у наредбу за њено креирање, погледајте функцију Извоз за каргс у Басх наредби за извоз. Никада не знате да је то можда у вашем следећем интервјуу за скриптовање љуске.



барје текстуална датотека која садржи један ред -.



олд-пхпје текстуална датотека која садржи редове старог ПХП -а који ће се прекинути у пхп7 или новијој верзији. (Савет: ерег)





Имајте на уму да се све горе описане функције могу пронаћи испод у Енднотеу о функцијама за подешавање.

Сед примери са еквивалентним командама

У окружењу командне линије, видећете да постоји више решења за дати задатак. Међутим, углавном желите да идете путем који даје најмањи отпор. Ево листе примера сед наредби са одговарајућим еквивалентним командама, где ће неке бити доле детаљно обрађене.



1. Одштампајте насумични ред (еквивалент сортирању -Р -| глава -1)

сед '$ ((СЛУЧАЈНО % 100)) п '-

2. Одштампајте последњи ред у датотеци (еквивалент глави -1 -)

сед '$ п'-

3. Одштампајте првих 10 редова у датотеци (еквивалент глави -н 10 -)

сед '10к'-

4. Одштампајте први ред у датотеци (еквивалент реп -1 -)

сед '1п'-

5. Избришите све инстанце знака (еквивалентно тр –брисати ‘0’ -, где је 0 знак који желимо да избришемо)

сед 'с / 0 // г'-

6. Претворите цсв датотеку у тсв (еквивалентно тр ‘,’ ‘ т’ -)

сед 'с/,/ т/г'-

7.Додајте ред у датотеку (еквивалент цат бар -)

сед '$ а ---'-

8. Унеси ред у датотеку (еквивалентно цат -бару)

сед '1и ---'-

9. Одштампајте све редове у датотеци (еквивалентно цат -)

сед 'п'-

10. Одштампајте редове који одговарају узорку (еквивалент греп -е ‘^1’ -)

сед '/^1/ п'-

11. Избришите редове који одговарају узорку (еквивалент греп -в -е ‘^1’ -)

сед '/^1/ д'-

12. Добијте број редова у датотеци (еквивалентно вц -л -)

сед '$ ='-

13. Пишите у датотеку у позадини (еквивалентна команда за команде)

сед 'ин{1} УСД'-

Пример коришћења сед за имплементацију команде тее

Одмах изнад, налази се пример са натписом Записивање у датотеку у позадини. Врста звукова попут команде тее. Па јесте. Овде ћемо проширити како имплементирати функцију замене тее у басх помоћу сед.

Команде

тее ()
{
тест $ {#} -ек 1 || повратак;
сед 'ин{1} УСД'-
}
главни()
теетхис;
мачкаово

главни

Оутпут

1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10

Овде ћете видети две листе целих бројева од 1 до 10. Први је из команде сек. Друго добијамо од мачке датотеке написане у тее -у. Знам да је смешно, али ради!

Пример коришћења сед за штампање насумичне линије у датотеци

Претпоставимо да желимо да одштампамо насумични ред у датотеци користећи басх и мало сед. Можемо ли то учинити? Да можемо! Ево како.

Имплементирајте функцију која

  1. Добија број редова у датотеци, Л.
  2. Генерише случајни број између 1 и Л, Р.
  3. Штампа Р.

Ова функција очекује да се улаз споља споји.

Команде

нека линија()
{
функцијалц()
{
сед '$ ='-
};
функцијапринт-лине()
{
сед '{1} УСДп '-
};
темп= $( мктемп );
мачка-> $ {темп};
мачка $ {темп} |принт-лине $((РАНДОМ%$( мачка $ {темп} |лц)+1 ));
рм $ {темп}
}

Пример употребе (1)

сек 100 |_

Излаз (1)

35

Пример употребе (2)

цурл хттпс://линукхинт.цом/басх_цут_цомманд/ -тихо |стрип-тагс|нека линија

Погледајте пример испод, користећи сед за скидање ХТМЛ ознака. Имајте на уму да горњи пример понекад враћа празно за празне редове. Као вежба, може се побољшати.

Коришћење сед за штампање линија у датотеци

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

Команде

принт-лине()
{
сед '{1} УСДп '-
}

Сада да видимо шта се дешава када користимо линију за штампање на речима.

Команде

речи|принт-линепедесет

Оутпут

педесет

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

Команде

изјавити -кфречи
изјавити -кфпринт-лине
сек 1 10$(речи| Тоалет -тхе ) | каргсбасх 'речи | линија за штампање {} '

Оутпут

1
Једанаест
двадесет један
31
41
51
61
71
81
91

Добро. Сада је то више тако! Видите како се сед може користити у басх скрипти за штампање било које линије у датотеци.

Сед примери без еквивалентних команди

У окружењу командне линије, понекад је пут до решења које даје најмањи отпор сед начин; у супротном ћете на крају обавити више посла него што је потребно. Неке команде могу бити наведене испод.

Наредите све линије у скрипти љуске

сед 'с/^/#/'-
Избришите први ред
сед '1д'-
Избришипоследњилинија
сед '$ д'-
Уметните линију пре линија које одговарају узорку
сед '/0 $/и ---'-
Уметните ред иза линија које одговарају узорку
сед ' / 0 $ / ---'-
Скините хтмл ознаке
сед 'с/*** .// г'-
Упграде ерегустари пхп код за покретањеупхп7 или новији
сед 'с/ерег ( ([^,]*). ([^)]*) ./ стрпос ( 2, 1)/г'
Провераватиако седје раније од одређене верзије
сед 'в 4.5'-

Пример сед верзије која се грана у басх

Изнад у примерима постоји линија за проверу да ли је сед старији од одређене верзије коју можемо користити за имплементацију гранања верзија у басх -у, што је верујем лакше него покушај имплементације функције за упоређивање бројева верзија из сед -верзије излаза . Та једина замка је да ако постоји ранија верзија сед која не подржава в команду, онда смо у невољи.

Команде

тест-сед-версион-ат-мост() {
Избацио | сед {1} УСД'-2> /дев/нула
}
три-версион()
{
Избацио 'Верзија{1} УСД. Добро. Уради то ';
тест-сед-версион-ат-мост{1} УСД && {
Избацио 'стари';
истина
} || {
Избацио 'Нова'
};
Избацио ' начин.'
}
главни()
{
локалнимв;
заву 4.{4,5};
урадити
три-версион$ {в};
Готово
}
главни

Оутпут

Верзија4.4. Добро. Урадите то на стари начин.
Верзија4.5. Добро. Урадите то на нови начин.

Имајте на уму да је верзија сед -а која ради на мојој машини од куцања ових знакова 4.4, што би објаснило горњи излаз. Такође, у исто време, најновија верзија гну сед била је 4.7, око 3 године старија од оне коју имам. Мој сед је стар! У ствари, у сед 4.0.6, параметар је додан команди версион тако да ова стратегија функционише за све наведене бар в4.0.6, што је блаже с обзиром да је верзија објављена почетком 2003. Добри сте.

Додатно сам копао, заправо ВЕСТИ читајући најновији изворни код. Верзија 4.6 има нову функцију, –дебуг која исписује скрипту и означава излазне линије. Ово би вам омогућило да преводите скрипте генерисане функцијама у басх у канонски облик. Хладан! Само не заборавите да вам је потребна сед верзија која се грана у басх -у. Ту долази до изражаја овај пример сед.

Пример басх функције која користи сед за скидање ХТМЛ ознака

У горњим примерима постоји линија за уклањање ХТМЛ ознака. Убацимо то у басх функцију и употребимо је за уклањање свих ХТМЛ ознака из прошлог чланка који сам написао.

Команде

стрип-тагс()
{
сед 'с/*** .// г'-
}
цурл хттпс://линукхинт.цом/басх_цут_цомманд/ -тихо |стрип-тагс

Не могу рећи да је савршено, али барем је читљиво на терминалу.

Сед примери са токовима посла: Пример тока рада: безбедно замените све користећи финд, греп и сед

Може се са сигурношћу рећи да су промене направљене помоћу сед -а са опцијом -и неповратне. То јест, осим ако нисте потпуно сигурни који текст треба заменити, вероватно ћете завршити са једним знаком мање него што је предвиђено. Зато ћемо у овом примеру користити сед у току рада за безбедну замену текста у свим датотекама које сте изабрали.

Процес рада

  1. пронаћи
  2. дршка
  3. сед
пронаћи

Овде ћете изабрати датотеке које ће бити предмет замене. Предлажем да користите наредбу у следећим редовима:

пронаћи -типф-име | дршка | каргс-ја ...

На пример, можда ћете желети да ограничите датотеке да замене ПХП датотеке, искључујући директоријуме гит спремишта на следећи начин.

пронаћи -типф-име*.пхп| дршка '.го' | каргс ...

Прочитајте више о наредби каргс у басх -у.

дршка

Затим ћемо покушати да упаримо соме_паттерн у датотекама изабраним на следећи начин. Имајте на уму да будући да користимо -о опцију за греп, излаз ће приказати само усклађени низ ако га има.

пронаћи -типф-име*.пхп| дршка '.го' |
каргс дршка соме_паттерн-или

Горња команда треба да врати листу стрингова који одговарају соме_паттерн.

сед

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

пронаћи -типф-име*.пхп| дршка '.го' |
каргс сед с/соме_паттерн/замена/г

Наредба греп постаје сед -и и опција -о се уклања. И ево га.

Сада можете проверити који ће се низови заменити у сед -у уместо да тестирате своју срећу.

Напомене о опцијама које се користе у примерима

Ево листе опција које се користе у седим примерима о којима се укратко говори.

Опција Опис
Измените на месту. Ако је улаз датотека (није убачена), резултат израза ће пребрисати садржај датотеке.

Сед прихвата једну

нпр) сед -н…

-е означава израз. Његов параметар је израз у сед језику.

Сед прихвата многе

нпр) сед -е'екпр1 '-е'екпр2'

Сакрива линију на коју израз не утиче. То јест, ако је израз исписни исказ на сед језику, тада линије које нису укључене у испис за штампање неће бити укључене у излаз.

нпр) сед -н…

За више информација о доступним опцијама сед, погледајте сед –хелп

Завршне напомене о еквивалентним командама користе се у примерима

Следећи помоћни програми командне линије укључени су у сед примере са еквивалентним командама.

  • врста
  • глава
  • Реп
  • дршка
  • мачка
  • НС
  • тее

Завршна белешка на крају - у примерима еквивалентне команде

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

мачкасоме-филе| врста -| глава -1

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

мачкасоме-филе| врста | глава -1

То се дешавало са наредбама - знак за командама у примерима.

Напомене о функцијама за подешавање

У случају да тражите, ево функција за подешавање за горње примере. Излаз добијен декларацијом -ф. Прочитајте више о наредби децларе у басху за више употреба.

Команде

речи()
{
сек 100
}
бар()
{
Избацио ---
}
олд-пхп()
{
Избацио 'ерег ($ УА,' Боттибот ')'
}

Суштина

Уживао сам у писању примера за Басх сед, па сам чак и успут покупио неколико додатних трикова. Сед је моћан услужни програм за командну линију и изражајан језик за руковање текстуалним датотекама. Ако сте волели да учите о сед, не брините, има још много тога да се додирне. Сед на.