Regex 在mac上用sed中的字符串替换换行符

Regex 在mac上用sed中的字符串替换换行符,regex,macos,sed,Regex,Macos,Sed,在文件中,我需要用字符串替换所有换行符(不是转义序列“\n”,而是实际的换行符)。我发现的所有问题都是相反的;i、 用文字换行符替换字符串。这是在Mac上 我试过以下方法 sed -i '' 's/\ /STOP/g' file.txt 但是它给了我一个“未终止的替代模式”错误。虽然它可以使用sed来完成,但是使用awk来完成这项操作要简单得多: awk -v ORS='STOP' '1' file 这会将输出记录分隔符更改为STOP,而不是默认的\n 更新:这里有一个sed版本,可以在OS

在文件中,我需要用字符串替换所有换行符(不是转义序列“\n”,而是实际的换行符)。我发现的所有问题都是相反的;i、 用文字换行符替换字符串。这是在Mac上

我试过以下方法

sed -i '' 's/\
/STOP/g' file.txt

但是它给了我一个“未终止的替代模式”错误。

虽然它可以使用
sed
来完成,但是使用
awk
来完成这项操作要简单得多:

awk -v ORS='STOP' '1' file
这会将输出记录分隔符更改为
STOP
,而不是默认的
\n

更新:这里有一个sed版本,可以在OSX上执行相同的操作:

sed -i.bak -n -e 'H;${x;s/\n/STOP/g;p;}' file

这只是将文件输出到命令行,而不更改实际文件。如何保存对文件的编辑?对于awk,您可以这样做:
awk-v ORS='STOP''1'文件>\u tmp&&mv\u tmp文件
sed
将进行内联编辑。酷!你能快速解释sed版本吗?我从未见过
H$以前在sed中使用的{x;
;p;}
-n
将抑制默认输出
H
-在保留空间中添加一个换行符,后跟图案空间的内容
x
-交换图案的内容并保留空格
g
-将图案空间的内容替换为保留空间的内容
p
-将模式空间写入标准输出。而
${…}
意味着只在最后一行执行该块。sed行上没有换行,因为sed逐行工作。您应该加载多行(N,h/h g/x,…)以处理多行。您的sed操作是正确的,请尝试双引号或
-e's/\n/STOP
/g'`