Utiliser grep pour exporter des lignes spécifiques vers de nouveaux fichiers de manière réitérée


0

J'ai un dossier avec beaucoup de fichiers. Je veux aller dans chaque fichier et exporter des lignes de plus de 80 caractères.

j'utilise

grep '.\{80\}' filename > newfilename

Mais je veux le faire pour tous les fichiers du répertoire à la fois. Comment puis-je faire cela afin d'avoir le même nombre de fichiers?


Est grep un indispensable?
Kamil Maciorowski

De plus, vous dites "plus de 80 caractères" mais votre code correspond également à 80.
Kamil Maciorowski

Le code spécifique n'a pas d'importance. J'ai besoin d'une boucle qui le fasse pour plusieurs fichiers et pour écrire les résultats dans différents fichiers de sortie. Je ne veux pas que les résultats soient ajoutés dans un seul fichier.
mah

Réponses:


1

Selon cette réponse sed peut filtrer les lignes par leur longueur:

sed -e '/.\{120\}/!d'

[…] Correspond aux lignes qui n'ont pas (au moins) 120 caractères (le ! après que l'expression doit exécuter la commande sur des lignes qui ne correspondent pas au modèle précédent) et les supprime (c'est-à-dire ne les affiche pas).

sed -i travaille en place. Cela conduit à une approche suivante:

cp -a original_dir/ modified_dir/
find modified_dir/ -type f -exec sed -i -e '/.\{80\}/!d' {} +

Maintenant chaque fichier de original_dir/ a sa version modifiée dans modified_dir/.

Sinon, vous pouvez travailler totalement à l'intérieur du original_dir/, récit sed pour sauvegarder les anciens fichiers avec un suffixe:

find original_dir/ -type f -exec sed -i.old -e '/.\{80\}/!d' {} +

Dans ce cas si vous utilisez -i au lieu de -i.old, les anciens fichiers seront perdus.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.