0 votes

Remplacer une chaîne par une nouvelle ligne + une chaîne dans un gros fichier

Je dois remplacer la chaîne ),( avec )\n,( dans un fichier de 10 Go. Le site \n dans ce cas, représente évidemment un saut de ligne. J'ai essayé avec cette commande :

sed -i '' '/),(/ s//),\n(/g' bigfile.sql

Cependant, cela n'a pas vraiment fonctionné comme prévu. Elle a bien remplacé la chaîne, mais n'a pas inséré de nouvelle ligne, mais simplement un "n" (elle a donc négligé la barre oblique inverse et l'a échappée). Avez-vous d'autres idées à ce sujet, ou bien où se trouve mon erreur dans la commande ci-dessus ?

0voto

0942v8653 Points 6754

Essayez

sed -i '' $'/),(/ s//),\\\n(/g' bigfile.sql
  • $'...' indique que la chaîne est une chaîne de style C. Cela vous permet d'utiliser la fonction \\ y \n des évasions, entre autres.
  • A la place de votre \n nous avons un \\ et ensuite un \n . Cela transmet une barre oblique inverse littérale, puis une nouvelle ligne littérale, à sed . Cela lui permet de reconnaître que le saut de ligne fait partie du motif, au lieu de le terminer.

Ce qui suit fonctionne également :

sed -i '' '/),(/ s//),\
(/g' bigfile.sql

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X