用文字替换换行符

问题描述 投票:0回答:7

这个 stackoverflow 问题 有一个用 sed 替换换行符的答案,使用格式 sed ':a;N;$!ba;s/ / /g'.

这可行,但不适用于特殊字符,例如 , 等等

我想做的是将换行符替换为文字 。 尝试过

sed ':a;N;$!ba;s/\n/\\n/g'

sed ':a;N;$!ba;s/\n/\\\n/g'

还有

sed ":a;N;$!ba;s/\n/'\'n/g"

但一切都无济于事。 Sed 不断用换行符替换换行符....

想法?

第一个答案后编辑:

为了完整起见,运行的命令是:

帖子内容=

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"}]}]}
regex sed
7个回答
150
投票

这就是你想要做的吗?

$ cat file
a
b
c

$ awk '{printf "%s\\n", $0}' file
a\nb\nc\n$

甚至:

$ awk -v ORS='\\n' '1' file
a\nb\nc\n$

首先在输入文件上运行 dos2unix 以删除

\r
(如果您愿意),或者将
-v RS='\r?\n'
与 GNU awk 一起使用,或者在 printf 之前执行
sub(/\r$/,"");
或任何其他十几种清晰、简单的方法来处理它.

sed 用于对各行进行简单替换,仅此而已。对于其他任何事情,你应该使用 awk。


56
投票

这应该适用于

LF
CR-LF
行结尾:

sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g' file

35
投票

您可以使用

sed
tr
来完成此操作:

sed 's/$/\\n/' file | tr -d '\n'

但是这会在最后添加一个额外的

\n


16
投票

使用

-z
选项您可以做到

sed -z 's/\n/\\n/g' file

sed -z "s/\n/\\\n/g" file

4
投票

如果它对任何人有帮助,我正在寻找这个问题的反面:用换行符替换字符串中的文字 '\'n。我设法用 sed 解决它,如下所示:

_s="foo\nbar\n"
echo $_s | sed 's/\\n/\n/g'

0
投票

在 macOS 上,因为不支持

;
命令分隔符,您可以使用
newline
https://stackoverflow.com/a/79080850/3627387

$ sed ':a
N
$!ba
s/\n/\\n/g' file

-2
投票

这是一个小Python脚本,用于替换' ' 和 ' ' 以递归方式在目录中 导入操作系统 导入系统

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)
© www.soinside.com 2019 - 2024. All rights reserved.