Mam następującą linię:
abababtestab
Próbuję wymyślić sed
wyrażenie, aby usunąć wszystkie wystąpienia ab
z początku wiersza, więc przekształcona linia powinna być:
testab
Wydaje mi się, że to powinno być proste, ale tak naprawdę nic nie wiem sed
.
Do tej pory mam:
sed 's/^ab//'
Ale to usuwa tylko pierwsze wystąpienie ab.
sed
Wspierała go nawet 7. edycja z około 1979 roku. Musiałoby to być gorsze naśladownictwo, aby nie zajmować się grupowaniem.\n*
, ale nie\n\{min,max\}
.\(...\)*
lub\(...\)\{min,max\}
, jako nie zamierzony wynik konkretnej implementacji, i obsługiwały one zarówno duplikację, jak i wyrażenia interwałowe po podwyrażeniach i referencjach wstecznych.\(ab\)\1*
wersja działa z domyślnym spadkiemsed
, a\(ab\)*
wersja działa z spadkiem SuSv4sed
. Przynajmniej tak jest w przypadku mojej wersji. Trzeba przyznać, że mój zestaw pamiątkowy zbudowałem na musl lib C, więc mogę sobie wyobrazić, że może to spowodować inne zachowanie. Ale zwykle, gdy określona funkcja działa w narzędziu dziedziczenia SuSv4, ale nie w narzędziu domyślnym, dzieje się tak dlatego, że zrobił to deweloper.Kolejny
sed
:Z każdą linią wejściową tworzymy etykietę
:1
, a następnie wykonujemys
ubstitutionab
na początku linii. Jeślis
ubstytucja się powiedzie,t
est gałąź polecenia do etykiety1
, ponów pracę, dopókiab
na początku wiersza nie pojawi się żaden wzór, gotowe.źródło
s/^ab//; t1
wystarczy