J'utilise la command:
tr '\n' ' ' < input.txt > output.txt
pour convertir de nouvelles lignes en espaces en utilisant la command tr
.
Cela fonctionne bien pour les files simples – mais j'ai plusieurs files dont j'ai besoin pour exécuter une seule command sur … similaire à la command suivante pour faire un échange de text:
find /directory/. -type f -exec sed -i 's/oldtext/newtext/g' {} \;
Existe-t-il une command que je peux append à un script bash (comme celui ci-dessus en utilisant find) pour supprimer \n
?
Cela fonctionnera même sans boucle pour tous les noms de files commençant par file
:
perl -pe 's/\n/ /g' file*
Pour de telles opérations, je préfère perl. A la même syntaxe avec sed, est portable et ne possède pas tous ces étranges parameters sed. Vous pouvez également appliquer -i
changez en perl (comme sed) pour faire des changements sur place: perl -i.old -pe ....
(l'ancien file sera sauvegardé avec l'extension .old -Vous pouvez simplement utiliser -i
et aucun file de sauvegarde ne sera conservé)
Si vous préférez, vous pouvez utiliser votre command find
comme ceci:
$ find . -type f -name 'file*' -exec bash -c 'tr "\n" " " <$0 >$0.new' {} \;
perl -i -lpe '$\=$"' file.data
-i
active l'édition sur place. -l
définit ORS = RS = "\n"
-p
met en place un file d'input implicite lu en + printing automatique des loggings. $\
est le ORS
qui est mis à $" = OFS = space by default
. C'est la command sed
vous searchz:
find /directory/. -type f -exec sed -i ':begin;$!N;s/\n/ /;tbegin' {} \;