Автор Тема: Заместване със sed на url от променлива  (Прочетена 3844 пъти)

makeme

  • Напреднали
  • *****
  • Публикации: 895
  • Distribution: Many
  • Window Manager: KDE
    • Профил
Някой може ли да ми помогне да проумея защо това работи:

Код:
echo "https://unix.stackexchange.com/" | sed 's;https://unix.stackexchange.com/;https://www.linux-bg.org;g'

А това не:

Код:
url1="https://unix.stackexchange.com/"
url2="https://www.linux-bg.org"
echo $url1 | sed s;${url1};${url2};g

Пробвах с всякакви размествания на "" '' \\ , но така и не успях да го подкарам.
« Последна редакция: Mar 14, 2021, 13:16 от makeme »
Активен

Distributions:  UbuntuMate; Kubuntu; CentOS; Kali; Raspberry Pi OS ...

makeme

  • Напреднали
  • *****
  • Публикации: 895
  • Distribution: Many
  • Window Manager: KDE
    • Профил
Re: Заместване със sed на url от променлива
« Отговор #1 -: Mar 14, 2021, 13:18 »
Добре, явно не съм пробвал всичките кавички :)

Ей така стана:

Код:
echo $url1 | sed "s;${url1};${url2};"
Активен

Distributions:  UbuntuMate; Kubuntu; CentOS; Kali; Raspberry Pi OS ...

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8770
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Заместване със sed на url от променлива
« Отговор #2 -: Mar 14, 2021, 13:37 »
Много отдавна не съм писал регулярки. Доколкото разбирам, това казва — започни от началото, вземи това, замени го с другото и така до края. Покрай текстовия ми редактор знам, че регулярките на ГНУ са по-различни от тези на Пърл. По-стари са и имат наследство:

https://www.gnu.org/software/emacs/manual/html_node/emacs/Regexps.html

Не мога да гарантирам сто процента за sed, но в Емакс единична кавичка (') има специално значение и то всъщност не е на кавичка.

Иначе със сигурност bash има пърлското разбиране. Ако е в двойна пробвай да интерпретираш, ако е в единична го приемай за низ.  В такъв случай единствено двуеточието евентуално ми се вижда проблемен знак (връзката горе). Но някак не ми се вярва. Другото, което не помня, имаше ли „U“ някакво специално значение (uppercase), защото „W“ си беше дума. Ако чука на някое от тия две неща.

Но всичко това са предположения на твърде отдавнашния ми опит с регулярки. Гледам да ги избягвам. В момента на писането им, знаеш, какво си искал, но като мине месец, изглежда на марсиански.

Ето сега се усещам, че при теб го няма условието „почни отначало“.

А бе говоря глупости, не ми обръщай внимание :'(
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

makeme

  • Напреднали
  • *****
  • Публикации: 895
  • Distribution: Many
  • Window Manager: KDE
    • Профил
Re: Заместване със sed на url от променлива
« Отговор #3 -: Mar 14, 2021, 15:41 »
Разбрах те, но то идеята беше именно как да се избегне регикса. От една страна понеже в url-ите има регикс знаци, но от друга да е променлива, което пък ( ' ) прецаква. ( ; ) съм го сложил пък понеже стандартния вариант с (/) не става заради url-то.

Бе някой сеща ли се за по-културен начин за заместване на стрингове в баш? Ако може да не се чупи като се опиташ да заместиш стринг, който е реално парола и вътре има какво ли не  ;D
Активен

Distributions:  UbuntuMate; Kubuntu; CentOS; Kali; Raspberry Pi OS ...

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8770
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Заместване със sed на url от променлива
« Отговор #4 -: Mar 14, 2021, 16:51 »
Bash сам по себе си е текстов редактор. Проблема е, че той понякога (например substring) е дори по-криптичен и от регулярен израз. На всичкото отгоре аз поне не съм попадал на наистина хубаво и изчерпателно ръководство. От сега ти казвам тия на tldp не стават, макар да са най-стари.

Мисля, че най-смислено ми е било:

https://aty.sdsu.edu/bibliog/latex/debian/bash.html

Поне си мисля, че от него съм разбрал най-много.

Туко що ми изскочи:

https://gist.github.com/magnetikonline/90d6fe30fc247ef110a1

Което на пръв поглед ми изглежда прегледно.

За съжаление повечето ресурси използват гадните цензури от Cloudflare и са ми недостъпни.

Много често ми се налага да правя такива неща.

Ето вчера например имах нещо такова:

Код
GeSHi (Bash):
  1. p3='/home/user/t/proba/3-3/'
  2. chrlen=${#p3}
  3.  
  4. for file in "$p3"*; do
  5.  
  6. f=${file:$chrlen}  
  7.  
  8. ...
  9.  
  10. done
  11.  
  12.  

Малко го опростих, за да е по-ясно. Значи на едното шифровано място ( ${#} ) взимам дължината на пътя. На другото ( ${?:?}) я махам от това, което ми връща цикъла. Защото цикъла ми дава не просто имена на документи, ами целия път до тях.

Тия неща не се връзват с питането ти, но просто се опитвам да онагледя откачения начин, по който се правят нещата в bash от пет насам. Но човек свикне ли, спира да му прави впечатление.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

remotexx

  • Напреднали
  • *****
  • Публикации: 3194
    • Профил
Активен

4096bits

  • Напреднали
  • *****
  • Публикации: 6137
    • Профил
Re: Заместване със sed на url от променлива
« Отговор #6 -: Mar 15, 2021, 08:30 »
Нещо такова ще свърши ли работа?
https://stackoverflow.com/questions/54059656/how-to-search-replace-arbitrary-literal-strings-in-sed-and-awk-and-perl#54059658
Това ми хареса

Между другото, регулярните е хубаво да се избягват, ако е възможно, защото не са бързички
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8770
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Заместване със sed на url от променлива
« Отговор #7 -: Mar 15, 2021, 09:01 »
Вчера и аз се сещах за tr. Благодарение на пропагандата на Хакмена и аз много го ползвам. Но поне по мои спомен, той можеше да работи с не повече от един знак. Поне така беше в по-старите версии, в новите не съм пробвал.

По принцип това за регулярките е вярно по принцип (без Go дето са крайни автомати на Асемблер). Но реално никога не съм удрял в това. Сигурно трябва да е някакъв относително голям код, стотина хиляди реда код, за да се усети.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

4096bits

  • Напреднали
  • *****
  • Публикации: 6137
    • Профил
Re: Заместване със sed на url от променлива
« Отговор #8 -: Mar 15, 2021, 14:20 »
Вчера и аз се сещах за tr. Благодарение на пропагандата на Хакмена и аз много го ползвам. Но поне по мои спомен, той можеше да работи с не повече от един знак. Поне така беше в по-старите версии, в новите не съм пробвал.

По принцип това за регулярките е вярно по принцип (без Go дето са крайни автомати на Асемблер). Но реално никога не съм удрял в това. Сигурно трябва да е някакъв относително голям код, стотина хиляди реда код, за да се усети.
Стига и един ред код,но да го изпълниш много, много пъти. Нещо, което редовно се прави, когато се парсват документи или каквото ще да е.
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.