如何在unix中用转义字符和字符串替换字符串

时间:2013-07-27 23:49:02

标签: unix

如何转换如下所示的一行:

794170|VWSD|AAA|e|h|i|j|STRING1|794170|VWSD|BBB|q|w|e|r|STRING2|794170|VWSD|CCC|z|x|c|v|STRING3|...and so on

到换行符分隔,

预期产出:

794170|VWSD|AAA|e|h|i|j|STRING1|
794170|VWSD|BBB|q|w|e|r|STRING2|
794170|VWSD|CCC|z|x|c|v|STRING3|

等等。 BTW我不是unix专家,只想要步骤或简单的命令来解决。感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

我假设您的字符串位于名为“x”的文件中,然后您就可以执行此操作。 我使用字符“:”来表示'sed'添加到字符串中的回车符。如果字符串中出现“:”,请选择其他内容。然后“tr”将“:”改为回车。输出是你想要的,除了开头有一个额外的回车。

cat x | sed 's/794170/:794170/g' | tr ':' "\n"

答案 1 :(得分:1)

您可以使用fold命令:

$ fold -w32 file
794170|VWSD|AAA|e|h|i|j|STRING1|
794170|VWSD|BBB|q|w|e|r|STRING2|
794170|VWSD|CCC|z|x|c|v|STRING3|

答案 2 :(得分:0)

我认为你不能用简单的命令来做到这一点。有几种选项可用于创建可以或多或少任意分割线条的脚本。任何Unix都可以使用awk实用程序。在大多数系统中,您还可以找到Python和Perl。我的猜测是,Perl或Python脚本是分割行的最简单方法。

这是在Python中实现它的一种方法

inline = "794170|VWSD|AAA|e|h|i|j|STRING1|794170|VWSD|BBB|q|w|e|r|STRING2|794170|VWSD|CCC|z|x|c|v|STRING3|"

splits = ['794170' + s for s in inline.split('794170')]

for s in splits[1:]:
   print s

794170|VWSD|AAA|e|h|i|j|STRING1|
794170|VWSD|BBB|q|w|e|r|STRING2|
794170|VWSD|CCC|z|x|c|v|STRING3|