Réponses:
Tack une évaluation de court-circuit après grep:
grep -q 'search_pattern' /file && : >/newfile
grep -qne produit aucune sortie sur STDOUT, quitte simplement avec le statut de sortie 0si le modèle est trouvé dans le fichier
Si le motif est trouvé ( &&), créez un fichier /newfilepar : >/newfile.
Vous pouvez également opter pour l' touch /newfileapproche habituelle , ou sur bash, une redirection vide - >/newfileferait aussi.
Juste pour noter, si le fichier existe déjà, touchcela ne changerait que les horodatages pertinents sans tronquer le fichier. Et la redirection vide >/newfilen'est pas prise en charge sur tous les shells en déplacement (par exemple dans zsh), où vous devez envoyer manuellement l'EOF.
:il?
:est un raccourci pour true, c'est une commande sans opération qui se
Juste pour le fun:
python3 -c "if 'string' in open('logfile').read(): open('newfile', 'wt')"
où 'string'est remplacé par la chaîne (condition), 'logfile'est remplacé par le chemin d'accès au fichier journal, 'newfile'est remplacé par le chemin d'accès réel au fichier à créer, le tout entre guillemets simples, comme dans l'exemple.
Vous pouvez utiliser awk avec sa system()commande. Si le /pattern/est trouvé, le bloc de code {}sera exécuté, dans ce cas nous appelons touch /tmp/my_file.txtvia la system()commande.
L'exemple ci-dessous montre la création d'un fichier temporaire si mon utilisateur est présent dans /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
Alternativement, nous pourrions utiliser la redirection pour déposer:
awk '/xieerqi/{f="/tmp/my_file.txt";print "" > f;close(f)}' /etc/passwd
Vous ne dites pas si vous voulez un nouveau fichier vide ou si vous avez besoin d'un traitement plus complexe pour créer le fichier.
S'il s'agit du premier, la réponse de @heemayl est parfaite.
Sinon, utilisez une instruction if:
if grep -q 'search_pattern' /file
then
# Create your file here
fi
greppour rechercher. L'-qoption supprimera toutes les sorties et retournera match / nonmatch viagreple code de sortie de, qui est facilement testable.