J'ai beaucoup de fichiers avec des onglets partout, et je voudrais les convertir tous en espaces. Je connais la expand
commande, mais malheureusement, je devrais taper chaque fichier en l'utilisant. Existe-t-il un moyen plus simple de le faire sous Linux?
linux
text-editing
la personne
la source
la source
expand
, je suppose qu'elle souhaite que l'alignement du texte soit préservé.'s/\t/ /g'
remplacer plus d'un onglet par ligne.find ./ -type f -exec sed -i ’s/\t/ /g’ {} +
" (c'est-à-dire "+
" au lieu de "\;
"), si lafind
version le prend en charge (et je n'ai personnellement rencontré aucune version qui ne le fait pas, mais ce n'est pas un standard POSIX , donc je suppose que cela peut arriver sur certains systèmes. Voir "-exec command {} +
" dans le manuel). Au lieu de lancer une instance desed
pour chaque fichier, cela va créer une liste d'arguments avec autant d'arguments de nom de fichier que le système prend en charge (getconf ARG_MAX
= 2097152 sur mon système), tout commexargs
, et ainsi lancer beaucoup moins desed
processus.sed
ne comprend pas la\t
séquence d'échappement des onglets. Vous pouvez le remplacer par un caractère de tabulation littéral, que vous pouvez saisir dans le shell par[Ctrl]+V, [Tab]
.expand
est probablement mieux quesed
pour cela, comme expliqué dans: stackoverflow.com/a/11094620/131824Il y a plusieurs manières de faire ça. Il existe également de nombreuses façons de se tirer une balle dans le pied tout en faisant cela si vous ne faites pas attention ou si vous êtes nouveau sous Linux comme vous semblez l'être. En supposant que vous pouvez créer une liste de fichiers que vous souhaitez convertir, soit en utilisant quelque chose comme
find
ou manuellement avec un éditeur, il vous suffit de diriger cette liste vers la suivante.Une façon dont vous pouvez vous tirer une balle dans le pied avec cela est de faire une faute de frappe afin de retrouver un fichier vide avec tous les noms de fichiers que vous spécifiez, supprimant ainsi le contenu de tous vos fichiers. Soyez donc prudent et testez tout ce que vous faites en premier sur un petit ensemble de fichiers que vous avez sauvegardés.
la source
mv
conditionnel à la réussite deexpand
:expand ... && mv ...
expand -t 4
d'étendre les tabulations à 4 espaces. En outre, cette méthode peut créer des sauts de ligne de fin. Mais sinon ça marche.-I foo
crée une variable de modèle foo pour chaque ligne d'entrée, de sorte que vous pouvez vous référer à l'entrée plus d'une fois.-print0
et-0
dire aux deux commandes d'utiliser \ 0 comme séparateur de ligne au lieu de SPACE, donc cette commande fonctionne pour les chemins avec des espaces.la source
Inconvénients: les
fichiers plus grands que la taille du tampon de canal ( 64 Ko ) sont tronqués
Avantages:
aucun fichier de
fichiers temporaires plus grand que la taille du tampon de tuyau n'est tronqué
la source
C'est mieux:
la source
/tmp/e
car si quelque chose d'autre utilise ce fichier, cela le gâchera. Comme si deux utilisateurs voulaient l'utiliser en même temps.J'ai essayé ce problème avec les exigences suivantes à l'esprit:
La dernière exigence était la plus difficile à remplir car "développer" ne permet pas de modifier les fichiers en place.
J'ai trouvé la solution suivante:
Voici quelques explications:
la source