Strona 1 z 2

BASH - rozdzielanie ciągu znaków po znaku "/"

: 30 listopada 2011, 20:06
autor: sponsoriada
Witam.
Mam taki problem. Jest ścieżka do katalogu np.:

Kod: Zaznacz cały

/home/jurek/jurkiewicz
Potrzebuję skryptu, który rozdzieli mi taki ciąg i doda do tablicy.
Wynik ma wyglądać tak:

Kod: Zaznacz cały

tablica[0]=home
tablica[1]=jurek
tablica[2]=jurkiewicz
Z góry dziękuję za pomoc i pozdrawiam.

Jeszcze jedno pytanie.
Jak mogę usunąć z pliku konkretny wiersz lub konkretny wyraz?

: 30 listopada 2011, 21:16
autor: maxdawid
Np. możesz to zrobić awkiem

Kod: Zaznacz cały

 awk -F "/" {' print $2 '} 
potem $3 itd.

: 30 listopada 2011, 21:31
autor: sponsoriada
Zadanie polega na tym że jest plik w którym są ścieżki do konkretnych folderów:

Kod: Zaznacz cały

/home/piotrek/
/home/jurek/
/etc/lalala/
Napisałem część skryptu do dodawania nowych ścieżek do folderów, a teraz chciałbym móc je usuwać.
Wymyśliłem tak że wszystkie ścieżki z pliku mam w tablicy. I wybieram selectem którą chcę usunąć. I teraz jest problem bo nie wiem jak usunąć daną ścieżkę z pliku.

: 30 listopada 2011, 22:20
autor: maxdawid

Kod: Zaznacz cały

sed '/szukanywzorzec/d' nazwa_pliku.txt


Wystarczy tego użyć w mądry sposób

: 01 grudnia 2011, 11:23
autor: sponsoriada
Też o tym myślałem tylko to wygląda tak, że dostaje zmienną

Kod: Zaznacz cały

 $śieżka= "/home/jurek/jurek"
i jak ją wstawię w:

Kod: Zaznacz cały

 `sed '/${ścieżka}/d' nazwa pliku`
to nie działa tak ładnie.

: 01 grudnia 2011, 18:52
autor: maxdawid

Kod: Zaznacz cały

sciezka=/home/jurek
sed "\%$sciezka%d" pliczek

: 01 grudnia 2011, 20:41
autor: sponsoriada
Działa! Dziękuję. Nie znałem takiej składni, czy mógłbyś mi ją wyjaśnić?

: 01 grudnia 2011, 21:55
autor: maxdawid
Mógłbym, ale posłużę się gotowcem:
\%regexp%
(The % may be replaced by any other single character.)

This also matches the regular expression regexp, but allows one to use a different delimiter than /. This is particularly useful if the regexp itself contains a lot of slashes, since it avoids the tedious escaping of every /. If regexp itself includes any delimiter characters, each must be escaped by a backslash (\).
Reszta chyba nie wymaga wyjaśnienia.

: 03 grudnia 2011, 23:43
autor: sponsoriada
Super wielkie dzięki jeszcze raz!
Pozdrawiam.

Dodane:
Jak już jesteś tak uczynny to może pomożesz mi albo chociaż nakierujesz.
Sprawa wygląda następująco. Skrypt z pliku będzie pobierał ścieżki do katalogów, które mają być tarowane i wrzuca sobie je do tablicy.
Jak rozwiązać problem pętli, która najpierw będzie pobierała element z tablicy, tarowała i dopiero po zakończeniu pierwszego elementu pobierała drugi i powtarzała czynność.
Nie chcę żeby pętla zrobiła tak, że w jednym czasie będą tarowane wszystkie elementy z tablicy.
Z góry dziękuję.

: 04 grudnia 2011, 09:39
autor: lessmian2
Jak dla mnie to strasznie komplikujesz ;)

Kod: Zaznacz cały

while read katalog;
do
  cos1
  cos2
  tar
done <plik_ze_sciezkami