Comment faire pour supprimer les espaces à partir de chaque ligne d'un fichier
J'ai un fichier qui ressemble à quelque chose comme ceci:
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
Je veux qu'elle ressemble à ceci (supprimer l'indentation):
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
Comment cela peut-il être effectué (à l'aide sed
peut-être?)?
Vous devez vous connecter pour publier un commentaire.
Avertissement: cela va écraser le fichier d'origine.
$' '
sur mac osx pour interpréter\t
correctement. Doit être entre guillemets simples, pas de double.sed $'s/^[ \t]*//'
Également, mac osx estsed
n'est pasgnu
, de sorte que beaucoup de lagnu
fonctionnalités ne sont pas pris en charge. @p @chrissed
sur Mac s'attend à une température de fichier à utiliser pour les remplacements. Généralement, vous pouvez simplement ajouter''
après-i
pour y répondre. La finale de la commande serait,sed -i '' 's/\s*//' yourfile
-i
APRÈS la RegEx arguments. Que ce soit prouve que je suis un insecte parmi les hommes, ou que vous êtes surhumaine. Franchement, je ne suis pas sûr, mais je sens que c'est le dernier. Merci!!!! Merci!!!! Merci!!!!Pour ce problème spécifique, quelque chose de ce genre:
Il dit à remplacer tous les espaces au début d'une ligne avec rien. Si vous souhaitez également supprimer des onglets, changer à cela:
Le premier "s" avant le /signifie "substitut". Le /'s sont les délimiteurs pour les modèles. Les données entre les deux premières /'s sont le motif de match, et les données entre le deuxième et le troisième /les données pour le remplacer. Dans ce cas, vous êtes de le remplacer par rien. Le "g" après le dernier slash moyens de le faire "à l'échelle mondiale", c'est à dire: dans l'ensemble du fichier, plutôt que seulement sur le premier match qu'il trouve.
Enfin, au lieu de
< input.txt > output.txt
vous pouvez utiliser le-i
option qui signifie qu'à éditer le fichier "en place". Ce qui signifie que vous n'avez pas besoin de créer un deuxième fichier contient votre résultat. Si vous utilisez cette option, vous perdrez votre fichier d'origine.Vous pouvez utiliser AWK:
sed
De l'environnement
while
/read
bouclesed
exemple travaillé pour moi où les réponses à d'autres questions similaires n'ont pas de travail. Merci!tr
; [:blank:] tout blanc horizontal, [:space:] tous horizontale ou verticale de l'espace. Donc, si vous utilisez [[:space:]], il doit non seulement supprimer les espaces et les tabulations, mais aussi les retours à la ligne (\n), vous laissant avec une seule ligne de texte. À l'aide de [[:blank:]] laissera les retours à la ligne. Notez que je n'ai pas réellement essayé cela avecsed
encore, mais c'est l'action à l'aide detr
Ce code Perl modifications de votre fichier d'origine:
La prochaine on fait une copie de sauvegarde avant de modifier le fichier d'origine:
Avis que Perl s'inspire fortement de sed (awk)
Ici, vous allez:
Ou:
sed -e 's/^[ \t]*//' name_of_file_from_which_you_want_to_remove_space >'nom _file_where_you_want_to_store_output'
e.g:- sed-e 's/^[ \t]*//' file1.txt > output.txt
Remarque:
s/: commande de Substitution ~ de remplacement pour le modèle (^[ \t]*) sur chaque adressée ligne
^[ \t]* : modèle de Recherche ( ^ – début de la ligne; [ \t]* correspondre à un ou plusieurs espaces vides, y compris onglet)
//: Remplacer (supprimer) tout motif correspondant
FWIW, si vous êtes édition ce fichier, vous pouvez probablement mettre en évidence toutes les lignes et l'utilisation non-onglet bouton.
Ne sais pas si c'est quelque exigence que ce doit être fait à partir de la ligne de commande. Si oui, alors :thumbs-up: à la accepté de répondre! =)