Portál AbcLinuxu, 1. května 2024 20:37


Dotaz: bash - převod mezer v řetezci na \+mezera

26.11.2017 15:06 Erik
bash - převod mezer v řetezci na \+mezera
Přečteno: 756×
Odpovědět | Admin
Ahoj,

chtěl bych vás poprosit o menší radu. Potřebuji převést řetězec př:

'cesta/soubor s mezerou' --> 'cesta/soubor\ s\ mezerou'

Řetězec má v v proměnné a potřebuji s ním pracovat ve scriptu.

Původně jsem si myslel, že si s tím poradím pomocí tr (viz příklad), ale to jsem se zmýlil: echo $VAR | tr " " "\\ "

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (cronin)
26.11.2017 15:14 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: bash - převod mezer v řetezci na \+mezera
Odpovědět | | Sbalit | Link | Blokovat | Admin
Narazil bys na spoustu dalších závadných znaků. Místo toho raději dávej proměnnou do uvozovek.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
26.11.2017 15:42 Erik
Rozbalit Rozbalit vše Re: bash - převod mezer v řetezci na \+mezera
to by šlo, díky
26.11.2017 15:44 d.c. | skóre: 30
Rozbalit Rozbalit vše Re: bash - převod mezer v řetezci na \+mezera
Odpovědět | | Sbalit | Link | Blokovat | Admin
sed 's, ,\\ ,g'

tr dokaze vymenovat jen znak za znak. Takze jeden znak s jedne usporadane mnoziny vymeni za prislusny znak z druhe usporadana mnoziny.

Priklad v kontextu:

printf " neco co obsahuje mezery a jednu dvojmezeru" | sed 's, ,\\ ,g'

\ neco\ co\ obsahuje\ mezery\ a\ jednu\ \ dvojmezeru

Jinak pro zpracovani cest s mezerou se vetsinou v shellu pouzivaji jine triky, napr. citace nebo nastaveni promenne IFS.
26.11.2017 20:49 figliar0 | skóre: 6 | blog: figliarstva | Košice
Rozbalit Rozbalit vše Re: bash - převod mezer v řetezci na \+mezera
Odpovědět | | Sbalit | Link | Blokovat | Admin

No a este neda nedoplnit...

echo "${var// // }"

26.11.2017 20:52 figliar0 | skóre: 6 | blog: figliarstva | Košice
Rozbalit Rozbalit vše Re: bash - převod mezer v řetezci na \+mezera

Teda vlastne skor:

echo "${var// /\\ }"

27.11.2017 01:29 d.c. | skóre: 30
Rozbalit Rozbalit vše Re: bash - převod mezer v řetezci na \+mezera
Coz je pekne a nevola externi programy! Ale je to bashismus, ne? Nebo to funguje i jinde? (Ja vim, ze dotycny se ptal na bash.)
27.11.2017 20:24 figliar0 | skóre: 6 | blog: figliarstva | Košice
Rozbalit Rozbalit vše Re: bash - převod mezer v řetezci na \+mezera
No vyzera to tak... V kazdom pripadne v dashi to nefunguje.
28.11.2017 07:38 d.c. | skóre: 30
Rozbalit Rozbalit vše Re: bash - převod mezer v řetezci na \+mezera
Nojo, tam nefunguje kde co, vsak sam Almquist nechtel, aby tam chodilo, nez co je holou nezbytnosti. Coz nemusi byt mnoho, ze... Tohle ale je cira bashovina, takze to nechodi ani v ksh.
27.11.2017 12:53 romank
Rozbalit Rozbalit vše Re: bash - převod mezer v řetezci na \+mezera
Odpovědět | | Sbalit | Link | Blokovat | Admin


Priklad: mame tieto subory v adresari:
"audio kniha.mp3" "nejaky obrazok.jpg" "novy textak.txt"

Takto to vyhladas a "spojis":

ls -1|while read item; do echo $item| tr -d [:blank:]; done

ja@server:~/asdf$ ls
audio kniha.mp3  nejaky obrazok.jpg  novy textak.txt
ja@server:~/asdf$ ls -1|while read item; do echo $item| tr -d [:blank:]; done
audiokniha.mp3
nejakyobrazok.jpg
novytextak.txt
ja@server:~/asdf$

Snad to pomoze ;)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.