2010-07-25 5 views
1

J'ai environ 350 fichiers texte qui contiennent tout le contenu de 5 dossiers sur mon disque dur. Pour chacun de ces fichiers, je voudrais supprimer un nombre spécifié de caractères au début et à la fin de chaque fichier. Je n'ai aucune connaissance d'AppleScript mais je suspecte qu'il peut convenir à ce que je veux accomplir. Toute aide sur l'automatisation de ce serait grandement apprécié que la modification manuelle de ces fichiers est une tâche ardue. Merci beaucoup.Modification d'un grand nombre de fichiers texte

Le texte suivant doit être retiré dès le début de chaque fichier:

STARTTYPE:RGIN 
MODEXP:NO 

Les besoins suivants à retirer de la fin de chaque fichier:

REFACTORSCALE:2.0 
ENDTYPE:FACTORED 
+0

Pour le texte qui doit être supprimé au début/à la fin, ce texte est-il sur une seule ligne? Autrement dit, aucune ligne ne se brise au milieu? –

+0

Non, il y a des sauts de ligne après chaque phrase, donc les éléments ci-dessus apparaissent sur 4 lignes au total. Je vous remercie! – RunLoop

Répondre

2

Est-ce que OS X ont la commande unix sed? Il a été conçu pour résoudre précisément ce type de problème.

Vous diriez (en supposant que votre texte pour supprimer est le même dans tous les fichiers):

sed -i 's/STARTTYPE:RGIN\nMODEXP:NO\n//' file_pattern 
sed -i 's/REFACTORSCALE:2.0\nENDTYPE:FACTORED\n//' file_pattern 

Par exemple, permet de dire un tas de fichiers txt doivent avoir ces modifications effectuées dans ces 5 sous-répertoires votre répertoire personnel. Vous pouvez faire:

sed -i 's/STARTTYPE:RGIN\nMODEXP:NO\n//' /home/Run_Loop/directory_1/*.txt 
sed -i 's/REFACTORSCALE:2.0\nENDTYPE:FACTORED\n//' /home/Run_Loop/directory_1/*.txt 
sed -i 's/STARTTYPE:RGIN\nMODEXP:NO\n//' /home/Run_Loop/directory_2/*.txt 
sed -i 's/REFACTORSCALE:2.0\nENDTYPE:FACTORED\n//' /home/Run_Loop/directory_2/*.txt 
sed -i 's/STARTTYPE:RGIN\nMODEXP:NO\n//' /home/Run_Loop/directory_3/*.txt 
sed -i 's/REFACTORSCALE:2.0\nENDTYPE:FACTORED\n//' /home/Run_Loop/directory_3/*.txt 
sed -i 's/STARTTYPE:RGIN\nMODEXP:NO\n//' /home/Run_Loop/directory_4/*.txt 
sed -i 's/REFACTORSCALE:2.0\nENDTYPE:FACTORED\n//' /home/Run_Loop/directory_4/*.txt 
sed -i 's/STARTTYPE:RGIN\nMODEXP:NO\n//' /home/Run_Loop/directory_5/*.txt 
sed -i 's/REFACTORSCALE:2.0\nENDTYPE:FACTORED\n//' /home/Run_Loop/directory_5/*.txt 
+0

Merci cela semble très utile, mais comment je passerais à travers les différents fichiers dans les 5 répertoires? Ils ont des noms différents mais la même extension. – RunLoop

+0

Est-ce que chacune de ces 5 choses répertoires _trees_ ou seulement des répertoires? Si ce ne sont que des répertoires, je changerais simplement le fichier file_pattern ci-dessus pour qu'il corresponde à ces 5 répertoires, ou j'écrirais un script shell pour exécuter cette paire 5 fois, une fois pour chaque répertoire. –

+0

S'il s'agit du répertoire _trees_, vous devrez écrire un script qui traverse l'arborescence, trouve tous les répertoires contenant les fichiers, puis exécute la paire de commandes sed pour chaque répertoire de feuilles. Je ne sais pas comment le faire de mon mieux. sed, au moins sur la machine, n'a pas l'option de remplacer les fichiers dans une recherche récursive. Si vous avez besoin d'écrire ceci, je chercherais de la documentation sur la commande unix find. –

Questions connexes