Une autre façon de replace les nouvelles lignes au lieu d'utiliser tr

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 .
  • Bien sûr, vous pouvez donner plusieurs noms de files à la command perl.

C'est la command sed vous searchz:

 find /directory/. -type f -exec sed -i ':begin;$!N;s/\n/ /;tbegin' {} \;