如何注入换行符以替换分隔符
Posted
技术标签:
【中文标题】如何注入换行符以替换分隔符【英文标题】:How to inject a line feed to replace a delimiter 【发布时间】:2012-06-22 14:09:43 【问题描述】:/usr/bin/sed 's/,/\\n/g' comma-delimited.txt > newline-separated.txt
这对我不起作用。我只是删除了“,”,但现在只是没有分隔标记。
【问题讨论】:
【参考方案1】:你必须有一个旧版本的 sed,所以你需要在你的替换中放入一个文字 LF char,即
/usr/bin/sed 's/,/
/g' comma-delimited.txt > newline-separated.txt
您甚至可能需要转义 LF,因此请确保最后一个字符 '\' 之后没有空格字符
/usr/bin/sed 's/,/\
/g' comma-delimited.txt > newline-separated.txt
我希望这会有所帮助。
【讨论】:
第二个示例适用于 AIX 6.1。很多时候,我们在 UNIX 问题上得到的唯一答案都与 Linux 有关。许多企业开发人员需要使用 IBM 或 HP 系统。 谢谢。您会发现我的答案通常使用 Sun4 语法。最近,我在 AIX 上工作了 2 年,我很高兴我知道了基础知识。祝大家好运! 感谢 Shellter!,将整个命令放在 1 行有效:$ /usr/bin/sed 's/,//g' comma-delimited.txt > newline-separated.txt(是这里是隐式换行符?) 对此我感到很惊讶。您是否从原始问题切换了操作系统或sed
版本?你从sed --version
得到任何输出吗?很高兴它有效。祝大家好运。
单引号是你的朋友。 Headdesk 使用双引号感到沮丧一段时间。 =(【参考方案2】:
这可能对你有用:
echo a,b,c,d,e | sed 'G;:a;s/,\(.*\(.\)\)/\2\1/;ta;s/.$//'
a
b
c
d
e
解释:
将换行符附加到模式空间。G
用模式空间中的最后一个字符替换,
,即\n
:a;s/,\(.*\(.\)\)/\2\1/;ta
删除换行符。 s/.$//
【讨论】:
我仍然得到逗号:$ echo a,b,c,d,e | sed 'G;:a;s/,(.*(.))/\2\1/;ta;s/.$//' a,b,c,d,e【参考方案3】:我尝试了以下方法,看起来很笨拙,但确实有效。容易明白。我使用 tr 来替换占位符 §。唯一需要注意的是占位符,必须不在字符串中。
ps -fu $USER | grep java | grep DML| sed -e "s/ -/§ -/g" | tr "§" "\n"
会给你一个缩进的命令行输出。 DML 只是一些服务器名称。
【讨论】:
【参考方案4】:在 AIX7 答案 #3 上运行良好: 我需要在段落的开头插入一个换行符,以便我可以执行 grep -p 在生成的“节”中过滤“mksysb” lsnim -l | /usr/bin/sed 's/^[a-zA-Z/\^J&/' (实际上,第一行有一个转义的换行符: lsnim -l | /usr/bin/sed 's/^[a-zA-Z/\ &/') 回忆命令显示了 ^J 语法 ...
【讨论】:
什么是lsnim
? ^J syntax
与这一切有什么关系?您的回答没有清楚地表明如何回答原始发帖人的问题以上是关于如何注入换行符以替换分隔符的主要内容,如果未能解决你的问题,请参考以下文章