Polecenie Sed: jak zamienić, jeśli istnieje jeszcze tylko insert?


Muszę edytować wiele wierszy w takim pliku , jeśli linia zaczyna się od (av lub avpgw), zamień je na nowy tekst,
w przeciwnym razie wstaw nowy tekst na początku.
Jak mogę to zrobić używając seda?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz to zrobić w ten sposób:
sed -e 's/^avpgw/new text/' -e t -e 's/^av/new text/' -e t -e 's/^/new text/' file

Spowoduje to zastąpienie szablonu przez
nowy tekst
(s///) i przejście do końca (t). W przeciwnym razie próbuje zastosować następny wzorzec. Zobacz też

podsumowanie poleceń sed
https://www.gnu.org/software/s ... mmary
.
Możesz także oddzielić polecenia za pomocą
;
:
sed 's/^avpgw/new text/; t; s/^av/new text/; t; s/^/new text/' file

lub umieść polecenia w swoim pliku wsadowym sed:
s/^avpgw/new text/
t
s/^av/new text/
t
s/^/new text/

i nazwijmy to tak:
sed -f commandfile file

Jeśli chcesz zignorować wielkość liter, dodaj i na końcu polecenia zamiany, tak jak w
s/^ av/new text/i
. Innym sposobem jest przeliterowanie tego za pomocą zestawów znaków
s/^ [aA] [vV]/new text/
. Ale to nie jest specyficzne dla
sed
, możesz ogólnie szukać wyrażeń regularnych.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To może zadziałać dla Ciebie (GNU sed):
sed -r 's/^av(pgw)?.*/replacement/;t;s/^/replacement/' file

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się