我想在每个名称后添加一个新行。我的文件包含:
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'
类似,但我总是得到一个r
orn
而不是换行符;例如,
吸烟者,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