Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: użycie 'sed' do usunięcia wszystkich linii pomiędzy liniamii zawierajacymi regex a i b
Forum PHP.pl > Forum > Serwery WWW
maraska
Witam, próbuję usunąć w plikach przy użyciu sed linie zawarte pomiędzy liniami zawierającymi dwa wyrażenia regularne razem z tymi liniami z wyrażeniami, czyli

  1. sed '/PATTERN-1/,/PATTERN-2/d' input.txt


Jak dam print, czyli:
  1. sed '/PATTERN-1/,/PATTERN-2/p' input.txt

to pokazuje te linie o które mi chodzi
ale jak dam "d" czyli usuń jak w przykładzie powyżej to nie usuwa.
Czemu?

konkretnie zapis wygląda tak:
  1. sed '/\/\/###=CACHE START=###/,/\/\/###=CACHE END=###/d' input.php
Pyton_000
Kod
... input.php >  output.php
maraska
Cytat(Pyton_000 @ 2.12.2016, 14:16:22 ) *
Kod
... input.php >  output.php


Dzięki za czas ale ma usunąć w tym samym pliku czyli input.php a nie zapisywać w nowym.
Pyton_000
sed -i
maraska
Cytat(Pyton_000 @ 2.12.2016, 14:27:50 ) *
sed -i


OK a jakby komuś było potrzebne usuwanie wielu linii gdy wiemy jaki ciąg ma zawierać pierwsza usuwana linia i ostatnia usuwana linia
i wiemy, że żadna inna linia takiego ciągu nie zawiera
i chcemy to zrobić na raz w wielu plikach w całych katalogach i ich podkatalogach
to robimy to tak:

  1. grep -rl 'SZUKANA_FRAZA' /KATALOG_GDZIE_SZUKAMY | xargs sed -i '/FRAZA1/,/FRAZA2/d'


a jeżeli FRAZA1 albo 2 zawiera znaki specjalne jak "/", "$" itp. to trzeba taki znak poprzedzić "\"
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.