J'ai plusieurs fichiers texte avec des en-têtes dans le format ci-dessous
nb: le contenu varie en fonction d'un exemple de contenu p> Je veux montrer les noms de fichiers et son Contenu correspondant à mon expression par exemple "200 ok" sortie attendu p>
J'ai essayé plus * | chat | grep -we "200 ok" code>
La commande ci-dessus montre l'expression uniquement sans afficher le nom de fichier et son contenu. P>
4 Réponses :
Vous pouvez utiliser ce BASH CODE> Script avec Grep code> Production de noms de fichiers correspondants: while IFS= read -rd '' file; do
printf '%s\n\n' "$file"
cat "$file"
done < <(grep -ZlxF '200 OK' *.txt)
Ne serait pas -x code> plus sûr que -w code> ici?
J'avais -x code> à l'origine mais parfois ces curl code> comme sorties similaires ont une ligne DOS terminant ou \ r code> intégré
Son disant Line 2: fichier: aucun fichier ou répertoire de ce type code>, et il n'affiche pas le contenu
Vous obtenez des noms de fichiers avec grep -zlwf '200 ok' * .txt code>?
oui, je reçois le nom de fichier, j'ai la réponse qui est plus compacte
Vous pouvez choisir quelle que soit la réponse que vous aimez, mais en exécutant un pour code> la boucle sur les noms de fichiers est la buggy et est très découragé. Les noms de fichiers peuvent contenir des espaces et des caractères génériques.
@anubhava: Droite! Mais dans ce cas, je voudrais exécuter un dos2unix code> sur les fichiers CURL'ED, car les terminaisons \ r vous mordront autrement plus tôt ou tard - par exemple, dans votre printf code> .
Je suggère d'utiliser uniquement du grep.
grep -rnw . -e "searchKey"
J'ai reçu son nom de fichier, mais j'avais besoin du contenu aussi. Mais il s'agit d'une réponse compacte pour trouver le nom de fichier, je suis upvotant pour cela
Pourquoi essayez-vous de concaténer les fichiers avec Répondre au commentaire:
Vous pouvez faire plus code> et grep code> après? Vous pouvez simplement faire grep -hew 'ok 200' * code>. TRUE, alors le nom de fichier serait un préfixe devant toutes les lignes (au lieu d'être affichée une fois au début), mais il serait facile de se déshabiller lors du traitement du résultat (je suppose que vous effectuerez d'autres traitement: -). < / p>
grep -hew -a 17 'ok 200' * code> pour voir les 17 lignes après aussi. Mettez un grand nombre si vous souhaitez voir toutes les lignes du fichier. Notez que toutes les lignes seront préfixées avec le nom de fichier. P>
J'ai reçu son nom de fichier, mais j'avais besoin du contenu aussi. Mais il s'agit d'une réponse compacte pour trouver le nom de fichier, je suis upvotant pour cela
Il suffit de modifier le mot recherché et le dir:
pour i in $ (grep -ilr "200 ok" * *); fais-ils echo $ i; Cat $ i; fait code> p>
Quelle est votre production attendue?
J'ai mis à jour la sortie dans la question
Est
200 ok code> toujours sur la première ligne?Non, ça va changer