sed - zamiana wielkich liter na ma

Potrzebujesz pomocy z C, C++, perl, python, itp.
timo
Posty: 28
Rejestracja: 19 lipca 2010, 19:44

sed - zamiana wielkich liter na małe

Post autor: timo »

Dlaczego taki kod

Kod: Zaznacz cały

sed -i -e '/numer/ s/[A-Z]/[a-z]/g' plik
zamienia w liniach ze słowem numer wielkie litery na dosłowne ciągi [a-z] zamiast na małe litery?
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Bo s zamienia coś, co pasuje do wzorca w pierwszym //, a coś, co jest w drugim //, przy czym to drugie nie jest w żaden sposób interpolowane (nie jest wzorcem, zakresem czy zbiorem znaków). Do tego służy y, ale akurat w tym przypadku, sed jest marną namiastką tr - niżej porównanie tej samej funkcjonalności:

Kod: Zaznacz cały

sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'
tr A-Z a-z
I tak, nie da się w sedzie podać [A-Z] przy użyciu y ;)
timo
Posty: 28
Rejestracja: 19 lipca 2010, 19:44

Post autor: timo »

Tak, tylko, że tr - z tego co wywnioskowałem z podręcznika systemowego - nie ma funkcji zamiany tylko w wierszach zawierających dane słowo - musiałbym kombinować z grepem, a potem zapisywaniem wyników do odpowiednich linii w pliku źródłowym, więc jednak zdecydowałem się na sed. Ale dziękuję za pomoc, bo sam kombinując nie wpadłem na ten y :)
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

To może tak:

Kod: Zaznacz cały

echo 'TEST 1234 TEST' | perl -pne 'y/A-Z/a-z/ if /1234/'
test 1234 test
timo
Posty: 28
Rejestracja: 19 lipca 2010, 19:44

Post autor: timo »

Faktycznie, działa, dziękuję.
ODPOWIEDZ