Jak usunąć ostatnią postać tylko wtedy, gdy ona tam jest?
Wejście:
OpenOffice.org/m openOffice.org/ozm Pers. Pfg. phil. Prof. odpowiednio Roonstr./m roonstr./ rozm
Pożądane wyjście:
OpenOffice.org openOffice.org Pers Pfg phil Prof odpowiednio Roonstr roonstr
Dotarłem do tej pory, że pozostała tylko kropka, ale niestety ostatnie polecenie sed usuwa również literę g
:
$ cat filename | grep "\." | cut -d"/" -f1 | sed 's/.$//'
text-processing
grep
sed
removeelastdotonlyifitsthere
źródło
źródło
sed -n '/\./{s=/[^/]*$==;s/\.$//;p}
. W każdym raziegrep
+sed
będzie działać znacznie dłużej niż tylko jedensed
.sed 's/[./]\+[^./]*$//'
Usuwanie znaku tylko wtedy, gdy jest, istnieje dokładnie opis rozszerzeń parametrów.
Kropka nie jest w tym przypadku wyjątkowa (kropka jest wyjątkowa w wyrażeniu regularnym).
Drugi wzór można usunąć za pomocą
%/*
:Aby usunąć oba:
Oczywiście do pracy z plikiem źródłowym szybsze jest użycie sed na pliku.
Pamiętaj tylko o cytowaniu kropki (aby dopasować ją dosłownie, w przeciwnym razie oznacza to: dowolny znak).
źródło
Wystarczy nieznacznie zmienić wyrażenie regularne: aby uciec od
.
I nie potrzebujeszgrep
źródło