Wyrażenie w terminach matematycznych, chciałbym usunąć region [MarkA,MarkB)
. Oznacza to, że usunięcie następuje tuż po słowie kluczowym MarkA
napotkane, aż do słowa kluczowego MarkB
, ale bez tej linii (linia zawierająca MarkB
słowo kluczowe pozostaje nietknięte).
Czy można to zrobić w sed
?
Powiedz moje MarkA
jest ^3
, i MarkB
jest 7
,
$ seq 9 | sed '/^3/,/7/d'
1
2
8
9
Dostanie moje 7
usunięty, ale chcę go zachować.
Aby być bardziej precyzyjnym, mogę dokładnie zlokalizować MarkA
(na przykład. ^3
), ale chcę usunąć do pierwszego MarkB
. To znaczy.,
seq 19 | sed '/^3/,/7/d'
jest czego szukam, jeśli 7
linia nie jest usuwana.
linux
unix
sed
text-editing
xpt
źródło
źródło
Odpowiedzi:
Używanie sed
Spowoduje to usunięcie zakresu do, ale nie włącznie z ostatnim wierszem w zakresie:
Jak wcześniej,
/^3/,/7/
wybiera cały zakres, włącznie z/7/
. I tak jak poprzednio, zakres ten jest usuwany za pomocąd
dowództwo. Zanim jednak usuniemy, sprawdzamy, czy linia zawiera/7/
iw takim przypadku drukujemy go za pomocąp
dowództwo.Używanie awk
awk oferuje dużą elastyczność. Tutaj używamy zmiennej
f
jako flaga, aby zdecydować, czy linie powinny być drukowane:źródło