Używając sed
do modyfikacji pliku w miejscu:
sed -i '/^\(report\|-t\(h\|o\)\)/!d' your_file
To instruuje, sed
aby usunąć wszystkie linie nie pasujące do wzorca. Wzór jest sama ^
(start linii), a następnie przez jedną report
lub -t
następnie albo h
czy o
.
Należy pamiętać, że nie jest to faktyczna modyfikacja na miejscu: sed
tworzy tymczasową kopię zapasową i zastępuje ją oryginalnym plikiem.
Jeśli chcesz sed
zachować kopię zapasową oryginalnego pliku (co może być dobrym pomysłem, jeśli plik zawiera krytyczne dane), podaj -i
przełącznikowi rozszerzenie, aby utworzyć plik kopii zapasowej:
sed -i'.bak' -e '/^\(report\|-t\(h\|o\)\)/!d' your_file
zmodyfikuje your_file
i utworzy kopię zapasową oryginału o nazwie your_file.bak
.
Notatka dodatkowa
Proszę, nie mylcie moich intencji ani nie obrażajcie się na to, ale zauważyłem, że macie wiele podobnych pytań związanych z wyrażeniami regularnymi / przetwarzaniem tekstu. Radzę, aby rozpocząć naukę sed
, awk
i grep
na własną rękę do prędkości dopomóc swojej wydajności. Ponownie, nie zrozumcie mnie źle, jestem bardzo szczęśliwy, mogąc pomóc (podobnie jak większość ludzi tutaj); po prostu myślę, że możesz czerpać ogromne korzyści z podnoszenia tych narzędzi do codziennego użytku.
Aby udowodnić, jak pomocni są tutaj ludzie, zastanów się nad sugestią @ slm w komentarzach poniżej i zapraszam do tego czatu w dowolnym momencie na pytania.
Możesz do tego użyć prostego grep:
źródło
-th
/-to
w-t[ho]
.grep -e
lubegrep
Używanie
sed
:źródło
-th
/-to
w-t[ho]
.Używanie
awk
:źródło
-th
/-to
w-t[ho]
.Pytający podniósł dwie kwestie:
Rozwiązania w tym momencie dotyczą pierwszego punktu, a tym samym również drugiego. Załóżmy jednak, że plik jest większy i wygląda następująco:
Czy zajęcie drugiego punktu OP nie byłoby konieczne?
wykonuje zadanie polegające na usuwaniu przypuszczalnie niechcianych linii zawierających tylko spacje, kropki i myślniki oraz zachowaniu reszty, cokolwiek to jest.
Sądzę, że ryzyko obu podejść polega na tym, że charakter pliku nie jest odpowiednio zdefiniowany.
źródło
Za pomocą Perla:
lub edytować w miejscu (jak
sed
,perl
będzie również tymczasową kopię zapasową, więc nie jest to prawdą w miejscu montażu):Spowoduje to utworzenie kopii oryginalnego pliku o nazwie
filename.bak
i zastąpienie oryginalnego pliku edytowaną wersją.źródło