Risposte:
Esegui una valutazione del corto circuito dopo grep:
grep -q 'search_pattern' /file && : >/newfile
grep -qnon produce alcun output su STDOUT, esce solo con lo stato di uscita 0se il pattern viene trovato sul file
Se viene trovato il modello ( &&), crea un file /newfileda : >/newfile.
Potresti anche optare per il solito touch /newfileapproccio, o su bashun reindirizzamento vuoto - >/newfilefarebbe altrettanto.
Solo per notare, se il file esiste già, touchcambierebbe solo i relativi timestamp senza troncare il file. E il reindirizzamento vuoto >/newfilenon è supportato su tutte le shell in movimento (ad es. In zsh), dove è necessario inviare manualmente l'EOF.
:fa?
:è una scorciatoia per true, è un comando no-op che esce sempre con lo stato di uscita 0.
Solo per divertimento:
python3 -c "if 'string' in open('logfile').read(): open('newfile', 'wt')"
dove 'string'viene sostituito dalla stringa (condizione), 'logfile'viene sostituito dal percorso del file di registro, 'newfile'viene sostituito dal percorso effettivo del file per creare, tutto tra virgolette singole, come nell'esempio.
Puoi usare awk con il suo system()comando. Se /pattern/viene trovato, il blocco codice {}verrà eseguito, in questo caso chiamiamo touch /tmp/my_file.txttramite system()comando.
L'esempio seguente mostra la creazione di un file temporaneo se è presente il mio utente /etc/passwd.
$ awk '/xieerqi/{system("touch /tmp/my_file.txt")}' /etc/passwd
$ ls -l /tmp/my_file.txt
-rw-rw-r-- 1 xieerqi xieerqi 0 1月 25 07:58 /tmp/my_file.txt
In alternativa, potremmo usare il reindirizzamento per archiviare:
awk '/xieerqi/{f="/tmp/my_file.txt";print "" > f;close(f)}' /etc/passwd
Non si dice se si desidera un nuovo file vuoto o se è necessaria un'elaborazione più complessa per creare il file.
Se il primo, la risposta di @heemayl è perfetta.
Altrimenti, usa un'istruzione if:
if grep -q 'search_pattern' /file
then
# Create your file here
fi
grepper cercare. L'-qopzione sopprimerà tutto l'output e restituirà match / nonmatch tramitegrepil codice di uscita, che è facilmente testabile.