Ответ 1
Это должно работать с завершением строк LF
или CR-LF
:
sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g' file
qaru.site/info/10927/... есть ответ на замену newlines с помощью sed, используя формат sed ': a; N; $! ba; s/\n//g.
Это работает, но не для специальных символов, таких как \r,\n и т.д.
То, что я пытаюсь сделать, это заменить символ новой строки литералом \n. Пробовал
sed ':a;N;$!ba;s/\n/\\n/g'
и
sed ':a;N;$!ba;s/\n/\\\n/g'
и
sed ":a;N;$!ba;s/\n/'\'n/g"
но все безрезультатно. Сед продолжает заменять символ новой строки.... символом новой строки.
Мысли?
Для полноты выполняются следующие команды:
PostContent = cat $TextTable | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g'
Где TextTable - это переменная, связанная с текстовым файлом, содержащим вывод JSON в следующем формате:
{"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"}]}]}
Это должно работать с завершением строк LF
или CR-LF
:
sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g' file
Это все, что вы пытаетесь сделать?
$ cat file
a
b
c
$ awk '{printf "%s\\n", $0}' file
a\nb\nc\n$
Запустите dos2unix во входном файле сначала, чтобы поместить \r
, если хотите, или используйте -v RS='\r?\n'
с GNU awk или do sub(/\r$/,"");
перед printf или любым другим из дюжины или около того ясных, простых способов обработки он.
sed - это простые подстановки на отдельных строках, то есть все. Для чего-либо еще вы должны использовать awk.
Вы можете сделать это, используя sed
и tr
:
sed 's/$/\\n/' file | tr -d '\n'
Однако это добавит дополнительный \n
в конец.
Здесь немного python script для замены "\ r\n" на "\ r" в каталоге рекурсивным способом import os import sys
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)