Najlepszym narzędziem do nieinteraktywnej edycji plików w miejscu jest ex
.
ex -sc '%s/\(\.com\).*/\1/ | x' file.txt
Jeśli używałeś vi
i kiedykolwiek wpisałeś polecenie zaczynające się od dwukropka :
, użyłeś polecenia ex. Oczywiście wiele bardziej zaawansowanych lub „fantazyjnych” poleceń, które można wykonać w ten sposób, są rozszerzeniami Vima (np. :bufdo
) I nie są zdefiniowane w specyfikacjach POSIXex
, ale specyfikacje te pozwalają na naprawdę zadziwiający stopień mocy i elastyczności w trybie niewizualnym edycja tekstu (interaktywna lub automatyczna).
Powyższe polecenie składa się z kilku części.
-s
włącza tryb cichy, aby przygotować się ex
do użycia wsadowego. (Pomiń komunikaty wyjściowe i in.)
-c
określa polecenie do wykonania po file.txt
otwarciu pliku ( w tym przypadku) w buforze.
%
jest specyfikatorem adresu równoważnym 1,$
— oznacza to, że następujące polecenie jest stosowane do wszystkich linii bufora.
s
to polecenie zastępcze, które prawdopodobnie już znasz. Jest powszechnie używany vi
i ma zasadniczo identyczne funkcje jak s
poleceniesed
, chociaż niektóre zaawansowane funkcje wyrażenia regularnego mogą się różnić w zależności od implementacji. W tym przypadku z „.com” do końca wiersza zastępuje się tylko „.com”.
Pionowy pasek oddziela sekwencyjne polecenia do wykonania. W wielu (większości) ex
implementacjach możesz również użyć dodatkowej -c
opcji, na przykład:
ex -sc '%s/\(\.com\).*/\1/' -c x file.txt
Nie jest to jednak wymagane przez POSIX.
Do x
wyjścia polecenia, po zapisaniu zmian w pliku. W przeciwieństwie do tego, wq
co oznacza „zapisz i wyjdź”, x
zapisuje do pliku tylko wtedy, gdy bufor został edytowany. Dlatego jeśli plik nie zostanie zmieniony, znacznik czasu zostanie zachowany.
.com
tylko zamiast usuwać wszystko po pierwszej/
postaci i włącznie z nią ? Co jeśli masz adres URL taki jaken.wikipedia.org/wiki/Ubuntu
na liście?