在Unix中组合来自文本文件的行?

时间:2012-10-25 14:17:46

标签: shell unix

我有一个文件输出以下格式的行:

$XYZ blah blah blah
$XYZ something
$XYZ random data

“$ XYZ”前缀对于每一行都是相同的,它确实以美元符号开头,并且除了行的开头之外,它不太可能发生在任何地方。

我能获得此文件的唯一方法是通过屏幕捕获,这会导致行以80个字符包裹。所以它看起来如下(如果你假装包装的数量小于80):

$XYZ blah bl
ah blah
$XYZ somethi
ng
$XYZ random 
data

我想重新创建真实的线条。我可以写一个程序来做它,但我想可能有一些我不熟悉的Unix命令可能会让它变得容易。有什么想法吗?

提前致谢。

3 个答案:

答案 0 :(得分:4)

首先,将所有行合并为一个长行,然后在看到应该是行开头的单词的位置添加换行符,如下所示:

tr -d '\n' < file | sed 's/XYZ/\nXYZ/g'

答案 1 :(得分:1)

perl

perl -pe 's/\n//g;s/XYZ\s+/\n$&/g' filename.txt

答案 2 :(得分:1)

paste命令就是为了这个目的:

paste -d "" - -

echo '$XYZ blah bl
ah blah
$XYZ somethi
ng
$XYZ random 
data' | paste -d "" - -

输出

$XYZ blah blah blah
$XYZ something
$XYZ random data