Cette question de stackoverflow a une réponse pour remplacer les nouvelles lignes par sed, en utilisant le format sed ': a; N; $! Ba; s/\ n// g'.
Cela fonctionne, mais pas pour les caractères spéciaux comme\r,\n, etc.
Ce que j’essaie de faire, c’est de remplacer le caractère de nouvelle ligne par un littéral\n .
sed ':a;N;$!ba;s/\n/\\n/g'
et
sed ':a;N;$!ba;s/\n/\\\n/g'
également
sed ":a;N;$!ba;s/\n/'\'n/g"
mais tout en vain. Sed continue de remplacer le caractère de nouvelle ligne .... par un caractère de nouvelle ligne.
Pensées?
Par souci d’exhaustivité, les commandes exécutées sont les suivantes:
PostContent = cat $TextTable | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g'
Où TextTable est une variable liant un fichier texte contenant une sortie JSON au format suivant:
{"posts":[{"title":"mysupertest","slug":"bi-test","markdown":"##TEST
First things first !
To TEST this TEST TEST, click the download button below.
If you need more information about the TEST TEST, you can read the Table of Contents below.
<a href='/assets/TEST.pdf' style='border-radius:5px; padding: 4px 15px; background-color:#008CBA; color:white; text-decoration:none; float:right;' download> Download </a>
##TEST OF TEST
###TEST TEST PLATFORM TEST GUIDE
WaTESTve TEST SetupTEST
TESTTEST
TESTTESTETESTTETSTTEST
TESTTESTTTETST
TESTTES
TESTTESTESSTSTESTESTTES
TEST","image":"http://localhost:3000/myimage.jpg","featured":false,"page":false,"status":"draft","language":"en_US","meta_title":null,"meta_description":null,"author":"4","publishedBy":null,"tags":[{"uuid":"ember2034","name":"implementation guides","slug":null,"description":null,"meta_title":null,"meta_description":null,"image":null,"visibility":"public"}]}]}
Cela devrait fonctionner avec les deux fins de lignes LF
ou CR-LF
:
sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g' file
Est-ce tout ce que vous essayez de faire?
$ cat file
a
b
c
$ awk '{printf "%s\\n", $0}' file
a\nb\nc\n$
ou même:
$ awk -v ORS='\\n' '1' file
a\nb\nc\n$
Commencez par exécuter dos2unix sur le fichier d’entrée pour supprimer le \r
s si vous le souhaitez, ou utilisez -v RS='\r?\n'
avec GNU awk ou effectuez sub(/\r$/,"");
avant le printf ou tout autre moyen parmi une douzaine de façons simples de le gérer.
sed est pour de simples substitutions sur des lignes individuelles, c'est tout. Pour toute autre chose, vous devriez utiliser awk.
Vous pouvez le faire en utilisant sed
et tr
:
sed 's/$/\\n/' file | tr -d '\n'
Cependant, ceci ajoutera un \n
supplémentaire à la fin.
Voici un petit script python pour remplacer le '\ r\n' par '\ r' dans le répertoire de manière récursive import os système d'importation
if len(sys.argv) < 2:
print("Wrong arguments. Expected path to directory as arg 1.")
exit(1)
path = sys.argv[1]
def RecOpOnDir(path, op) :
for f in os.listdir(path):
full_f = path + "/" + f
if os.path.isdir(full_f):
RecOpOnDir(full_f, op)
else:
try:
op(full_f)
except Exception as ex:
print("Exception during proc '", full_f, "' Exception:", ex)
file_counter = 0
def WinEndingToUnix(path_to_file):
global file_counter
file_counter += 1
file_strs = []
with open(path_to_file) as f:
for line in f:
file_strs.append(line.replace(r"\r\n", r"\n"))
with open(path_to_file, "w") as fw:
fw.writelines(l for l in file_strs)
try:
RecOpOnDir(path, WinEndingToUnix)
print("Completed.", file_counter, "files was reformed")
except Exception as ex:
print("Exception occured: ", ex)
exit(1)