在 sed 中添加新行以创建列表,反斜杠转义不起作用

在 sed 中添加新行以创建列表,反斜杠转义不起作用

我想在每个名称后添加一个新行。我的文件包含:

Smoker, M., Schauser, L., Yoshioka, H.,

我想要的是:

Smoker, M
Schauser, L
Yoshioka, H

所以我在 sed 中使用了多个选项:

sed 's%\., %\n%g'
sed 's%\., %\r%g'
sed -E 's%\., %\r\n%g'

类似,但我总是得到一个rorn而不是换行符;例如,

吸烟者,Mn绍瑟,Ln吉冈,Hn
         ↑ ↑ ↑

我正在使用 Mac OS sed。

答案1

当您的“sed”不支持 s/// 的 RHS 上的“\n”时,您可以尝试以下方法:

sed -e '/\.,/!d' -e 'G;s/\.,[ ]*\(.*\(.\)\)$/\2\1/' -e 'P;D' < yourfile

假设没有 TAB,输入数据如图所示。我们依靠原生的“sed”通过“G”注入到模式空间中来提供换行符,并且可以根据需要匿名移动换行符以获得我们想要的结果。

答案2

这似乎可以使用 BSD sed 和 bash 工作:

sed $'s/\., */\\\n/g'

它要求将文字点、逗号和任意数量的空格的每个序列替换为换行符。

如果您没有支持$'\n'换行符语法的 shell,您可以尝试以下操作:

sed 's/\., */\
/g'

即,输入所有内容直到反斜杠,然后点击Enter 并完成/g'。或者,根据您的 shell 输入模式的设置方式,Ctrl+V后接 Ctrl+J可能会插入换行符而不评估命令。

答案3

你肯定想要\n又不想要\r

然而,

sed 's%\., %\n%g'

为我工作,所以我不知道你为什么遇到麻烦。

也许双反斜杠可以解决您的问题。或者尝试使用 control-v control-m (这将在屏幕上\n显示)来代替。^M

相关内容