Regex na odstranění podadresáře z cesty

webhope

Regex na odstranění podadresáře z cesty
« kdy: 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;
« Poslední změna: 28. 03. 2010, 15:25:16 od Petr Krčmář »


branchman

Re: regex na odstranění podadresáře z cesty
« Odpověď #1 kdy: 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;

webhope

Re: regex na odstranění podadresáře z cesty
« Odpověď #2 kdy: 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í.

deadmail

Re: Regex na odstranění podadresáře z cesty
« Odpověď #3 kdy: 29. 03. 2010, 05:38:15 »
A co tak:

Kód: [Vybrat]
cesta="/adr1/adr2/pokus"
 echo "${cesta%/*}"

webhope

Re: Regex na odstranění podadresáře z cesty
« Odpověď #4 kdy: 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.


deadmail

Re: Regex na odstranění podadresáře z cesty
« Odpověď #5 kdy: 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 cez grep. Da sa to aj priamo v bashi:

Kód: [Vybrat]
line='TYPE="ntfs"'
line="${line%\"*}"
line="${line#*\"}"
echo $line

webhope

Re: Regex na odstranění podadresáře z cesty
« Odpověď #6 kdy: 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.

deadmail

Re: Regex na odstranění podadresáře z cesty
« Odpověď #7 kdy: 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 ...

webhope

Re: Regex na odstranění podadresáře z cesty
« Odpověď #8 kdy: 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é