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

在unix中如何用转义字符加字符串替换字符串,unix,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| 等等。 顺便说一句,我不

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

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|
等等。
顺便说一句,我不是unix专家,只需要步骤或简单的命令来解决。感谢您的帮助。

您可以使用
折叠
命令:

$ 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|

您可以使用
折叠
命令:

$ 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|

我不认为你可以用一个简单的命令来完成。有几个选项可用于创建可以或多或少任意拆分行的脚本。任何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|

我不认为你可以用一个简单的命令来完成。有几个选项可用于创建可以或多或少任意拆分行的脚本。任何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|

我假设您在一个名为“x”的文件中有字符串,那么您可以这样做。 我使用“:”字符表示“sed”添加到字符串中的回车。如果字符串中出现“:”则选择其他内容。然后“tr”更改为:“回车”。输出如您所愿,只是在开始时有一个额外的回车

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

我假设您在一个名为“x”的文件中有字符串,那么您可以这样做。 我使用“:”字符表示“sed”添加到字符串中的回车。如果字符串中出现“:”则选择其他内容。然后“tr”更改为:“回车”。输出如您所愿,只是在开始时有一个额外的回车

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

正如@sudo_O所建议的那样,如果块的宽度总是固定的,fold将起作用。不幸的是,正如我在@sudo_O中提到的,列字段是变化的。很抱歉,我不熟悉Perl和Python,您能告诉我这里是如何使用它的吗?我更喜欢处理tr和awk以及sed(最少)。如果您的块总是固定宽度,那么@sudo_O建议的fold将起作用。不幸的是,正如我在@sudo_O中提到的,列字段是变化的。很抱歉,我不熟悉Perl和Python,您能告诉我如何在这里使用它吗?我更习惯于处理tr、AWK和sed(最少)。我不能使用fold,因为任何一行的字符串和字符长度都是不同的,但第一个字段(794170)和第二个字段(VWSD)对于任何一行都是相似的。我要说的唯一信息是你的示例,它是固定宽度的!如果你真的清楚地解释了你的问题,也许你会得到一个合适的答案。谁曾对这个答案投过反对票,而对@KitAlmario comment投过赞成票?我一定是个读心术的人,恭喜。我不能使用fold,因为任何一行的字符串和字符长度都是不同的,但第一个字段(794170)和第二个字段(VWSD)对于任何一行都是相似的。我要说的唯一信息是你的示例,它是固定宽度的!如果你真的清楚地解释了你的问题,也许你会得到一个合适的答案。谁曾对这个答案投过反对票,而对@KitAlmario comment投过赞成票?一定是一个读心术的人,恭喜。这个问题似乎离题了,因为它是关于Unix/Bash的,属于它。这个问题似乎离题了,因为它是关于Unix/Bash的,属于它!我只需要将冒号:改为grave-accent(`),因为文件中有有效的冒号,而且是唯一的!我只需要将冒号:改为grave-accent(`),因为文件中有有效的冒号,而且是唯一的。