bash, sed - wyrażenia regularne

Potrzebujesz pomocy z C, C++, perl, python, itp.
dawideo
Beginner
Posty: 154
Rejestracja: 25 czerwca 2007, 11:46
Lokalizacja: Zbychowo

bash, sed - wyrażenia regularne

Post autor: dawideo »

Hmm jak na razie jestem początkujący w te klocki i uczę się głównie tego języka z książek i przykładów znalezionych w necie. Jednym znich jest:

Kod: Zaznacz cały

katalog (){
echo "Podaj nazwy katalogow"
read dir
read dir2
lista=$(diff -s "$dir" "$dir2" | grep ident | sed 's/.*\///;s/\ .*//')
    if [ -z "$lista" ]; then
    echo "Brak identycznych plików w podanych katalogach"
    else
    echo
    echo "Znaleziono identyczne pliki:"
    echo "$lista"
    fi

}



if [ $# -eq 0 ]; then
 echo "Skrypt oblicza ilosc lini, slow, znakow w pliku oraz podaje rozmiar pliku"
 echo "-inazwapliku"
 echo "lub szuka takich samych plikow w zadanych katalogach"
 echo "-j"
	elif [ $# -gt 1 ]; then
  	echo "Nieprawidlowa liczba paramertow"
		else
		while getopts :i:j par 
 		do
  		  case $par in
   			i) if [ -r $OPTARG ]; then
  			   echo "W pliku jest: `cat -n $OPTARG | tail -1 | awk '{print $1}'` linii"
   			   echo "W pliku jest: `wc -w $OPTARG | awk '{print $1}'` slow"
   			   echo "W pliku jst:  `wc -c $OPTARG | awk '{print $1}'` znakow"
        		   echo "Plik zajmuje: `ls -il | grep -w $OPTARG | awk '{printf $6}'` bajtów"
			   else
			   echo "Nie ma takiego pliku"
     			   fi;; 

  			j) katalog;;

 			 ?) echo "Nieznana opcja."; exit;;
		  esac
		done;
fi
Praktycznie rozumiem jak działa w miar prosty ten skrypt nie rozumiem tylko co robią te znaczki po sed (bodajże są to wyrażenia regularne) a dokładniej mi chodzi o tą część

Kod: Zaznacz cały

sed 's/.*\///;s/\ .*//'
Czy mógłby mi ktoś wytłumaczyć co powodują te wyrażenia???.
thalcave
Junior Member
Posty: 526
Rejestracja: 03 maja 2007, 19:57
Lokalizacja: gdynia

Post autor: thalcave »

Kod: Zaznacz cały

sed 's/.*\///;s/\ .*//'
Ogolna postać seda to

Kod: Zaznacz cały

sed s/stary_tekst/nowy_tekst/
zatem w Twoim przykładzie stary_tekst to: .*\/ (dowolny znak ( . ) dowolnie wiele razy ( * ))
a nowy_tekst: (brak)
a następnie stary_tekst to: \ .* (spacja i dowolny ciag znakow)
a nowy_tekst znowu jest pusty
ODPOWIEDZ