matriculas - sed-e linux
Reemplazar nuevas lĂneas con literal / n (4)
Esta pregunta de stackoverflow tiene una respuesta para reemplazar las líneas nuevas con sed, utilizando el formato sed '': a; N; $! Ba; s / / n / / g''.
Esto funciona, pero no para caracteres especiales como / r, / n, etc.
Lo que estoy tratando de hacer es reemplazar el carácter de nueva línea por un / n literal. Intentó
sed '':a;N;$!ba;s//n///n/g''
y
sed '':a;N;$!ba;s//n////n/g''
además
sed ":a;N;$!ba;s//n/''/'n/g"
Pero todo fue en vano. Sed sigue reemplazando el carácter de nueva línea ... con un carácter de nueva línea.
¿Pensamientos?
Editado después de la primera respuesta:
En aras de la integridad, los comandos ejecutados son:
PostContent = cat $TextTable | sed -E '':a;N;$!ba;s//r{0,1}/n///n/g''
cat $TextTable | sed -E '':a;N;$!ba;s//r{0,1}/n///n/g''
Donde TextTable es una variable que se vincula a un archivo de texto que contiene una salida JSON en el siguiente formato:
{"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"}]}]}
¿Es esto todo lo que estás tratando de hacer?
$ cat file
a
b
c
$ awk ''{printf "%s//n", $0}'' file
a/nb/nc/n$
o incluso:
$ awk -v ORS=''//n'' ''1'' file
a/nb/nc/n$
Ejecute dos2unix en el archivo de entrada primero para eliminar los /r
s si lo desea, o use -v RS=''/r?/n''
con GNU awk o do sub(//r$/,"");
antes de la impresión o cualquier otra docena de formas claras y sencillas de manejarlo.
sed es para sustituciones simples en líneas individuales, eso es todo. Para cualquier otra cosa debes usar awk.
Aquí hay un pequeño script de Python para reemplazar ''/ r / n'' con ''/ r'' en el directorio de manera recursiva importar el sistema de importación de sistemas
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)
Esto debería funcionar con ambos finales de línea LF
o CR-LF
:
sed -E '':a;N;$!ba;s//r{0,1}/n///n/g'' file
Puedes hacer esto usando sed
y tr
:
sed ''s/$///n/'' file | tr -d ''/n''
Sin embargo, esto agregará un /n
adicional al final.