Mam plik dziennika i chcę go wyszukać w poszukiwaniu ciągu i tylko wtedy, gdy ten ciąg zostanie znaleziony, należy utworzyć nowy plik. Jak mogę to osiągnąć, sed doenst wydaje się pasować w tym przypadku.
command-line
Jacknife
źródło
źródło
grep
do wyszukiwania.-q
Opcja będzie tłumić wszystkie wyjścia i powrotu mecz / nonmatch poprzezgrep
„s kod wyjścia, który jest łatwo sprawdzalne.Odpowiedzi:
Wykonaj ocenę zwarcia po
grep
:grep -q
nie wytwarza danych wyjściowych w STDOUT, po prostu kończy pracę ze statusem wyjścia,0
jeśli wzorzec znajduje się w plikuJeśli wzorzec zostanie znaleziony (
&&
), utwórz plik za/newfile
pomocą: >/newfile
.Możesz również wybrać zwykłe
touch /newfile
podejście lubbash
puste przekierowanie - też>/newfile
by to zrobiło.Uwaga: jeśli plik już istnieje,
touch
zmieniłby tylko odpowiednie znaczniki czasu bez obcięcia pliku. Puste przekierowanie>/newfile
nie jest obsługiwane we wszystkich powłokach w podróży (np. Wzsh
), gdzie trzeba ręcznie wysłać EOF.źródło
:
zrobić?:
jest skrótemtrue
, to polecenie no-op, które zawsze kończy działanie ze statusem wyjścia 0.Dla żartu:
gdzie
'string'
jest zastąpiony przez ciąg (warunek),'logfile'
jest zastąpiony ścieżką do pliku dziennika,'newfile'
jest zastąpiony rzeczywistą ścieżką do pliku, aby utworzyć wszystkie w pojedynczych cudzysłowach, podobnie jak w przykładzie.źródło
Możesz użyć awk z jego
system()
poleceniem. Jeśli/pattern/
zostanie znaleziony, blok kodu{}
zostanie wykonany, w tym przypadku wywołujemytouch /tmp/my_file.txt
za pomocąsystem()
polecenia.Poniższy przykład pokazuje tworzenie pliku tymczasowego, jeśli w nim jest mój użytkownik
/etc/passwd
.Alternatywnie możemy użyć przekierowania do pliku:
źródło
Nie mów, czy chcesz nowy pusty plik, czy potrzebujesz bardziej złożonego przetwarzania, aby utworzyć plik.
Jeśli to pierwsze, odpowiedź @heemayl jest na miejscu.
W przeciwnym razie użyj instrukcji if:
źródło