Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: webhope 28. 03. 2010, 12:44:03

Název: Regex na odstranění podadresáře z cesty
Přispěvatel: webhope 28. 03. 2010, 12:44:03
Mám /mnt/pokus
a chci pomocí regul. výrazu vybrat jen rodičovský adresář: /mnt
Zkoušel jsem něco vymyslet, ale nedaří se.
Finální podoba příkazu má být taková:

Kód: [Vybrat]
read cesta
if [ ! -d "$cesta" ]; then echo "Adresar neexistuje";
  ls ${cesta/pattern/parent_dir};
fi;
Název: Re: regex na odstranění podadresáře z cesty
Přispěvatel: branchman 28. 03. 2010, 13:03:55
Nieco taketo?
Kód: [Vybrat]
read cesta
if [ ! -d "$cesta" ]; then echo "Adresar neexistuje";
  echo "$cesta" | sed -e 's:/[^/]*$::' | xargs ls
fi;
Název: Re: regex na odstranění podadresáře z cesty
Přispěvatel: webhope 28. 03. 2010, 13:17:28
I to může být. I když myslel jsem, že přes parameter substitution by bylo snazší řešení.
Název: Re: Regex na odstranění podadresáře z cesty
Přispěvatel: deadmail 29. 03. 2010, 05:38:15
A co tak:

Kód: [Vybrat]
cesta="/adr1/adr2/pokus"
 echo "${cesta%/*}"
Název: Re: Regex na odstranění podadresáře z cesty
Přispěvatel: webhope 30. 03. 2010, 15:17:26
Deadmail
To mě nenapadlo

awk
Řeším obdobný problém. Mám řetězec TYPE="ntfs" a chci dostat to co je uvnitř závorek. Nevede se mi odstranit poslední uvozovku.

Kód: [Vybrat]
fs=$(echo $line | awk '{print substr($5,7,length($5)-1)}');
echo $fs; read

Zkoušel jsem to taky pomocí parameter subsitution, ale umím odstranit jen to co je do znaku x v pořadí nebo to co je od znaku y v pořadí. Předpokládám, že délka řetězce mezi uvozovkama se může měnit, takže varianta "odstraň od y až do konce" nepřipadá v úvahu.
Název: Re: Regex na odstranění podadresáře z cesty
Přispěvatel: deadmail 30. 03. 2010, 18:06:08
Citace
Řeším obdobný problém. Mám řetězec TYPE="ntfs" a chci dostat to co je uvnitř závorek.

To sa riesilo nedavno tu na fore (http://forum.root.cz/index.php?topic=280.msg1122#msg1122) cez grep. Da sa to aj priamo v bashi:

Kód: [Vybrat]
line='TYPE="ntfs"'
line="${line%\"*}"
line="${line#*\"}"
echo $line
Název: Re: Regex na odstranění podadresáře z cesty
Přispěvatel: webhope 30. 03. 2010, 22:14:15
No a já jsem přišel na to jak to má být v tom awk:

Kód: [Vybrat]
line='/dev/sda9: UUID="58E75A17692994A5" LABEL="ARCHIV" TYPE="ntfs"'
echo $line | awk '{print substr($4,7,length($4)-7)}'

Problém je v tom, že jsem myslel, že ten třetí argument substr() znamená kolik se má odečíst od konce. Místo toho to znamená délku toho řetězce, který má zůstat. Vlastně se to dá vypočítat: celková délka řetězce mínus délka (neboli pozice) toho co má být odstraněno ze začátku.
Název: Re: Regex na odstranění podadresáře z cesty
Přispěvatel: deadmail 31. 03. 2010, 07:32:42
Citace
No a já jsem přišel na to jak to má být v tom awk:

no to funguje len pre stvorpismenkove premenne pred rovnasa ...
Název: Re: Regex na odstranění podadresáře z cesty
Přispěvatel: webhope 31. 03. 2010, 18:06:58
A ted jsem zjistil, že už jsem to jednou řešil a sice takto:

Kód: [Vybrat]
uuid=${uuid//UUID=/}; uuid=${uuid//\"/}; # odstranění UUID= a uvozovek :-)

čili s TYPE je to podobné