2012-10-25 56 views
5

我有輸出以下形式的行的文件:在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命令可能會讓它變得容易。有任何想法嗎?

在此先感謝。

+0

爲什麼抓屏? – njzk2

+0

各級瘋狂的安全權限。我可以做一隻貓,但我不能將它ftp或cp到某處我可以從中獲取它的地方,或者其他我能想到的東西。 – user1738853

+0

如果您在終端仿真器中執行'cat',是不是插入客戶端的換行符,在這種情況下,您應該能夠以某種方式在本地管道輸出? – lynks

回答

4

首先,合併所有的行成一個長行,然後添加一個新行,無論你看這應該是一條線的開始的話,像這樣:

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

我正要用這個來回答 – lynks

+0

不,但也許是因爲我沒有正確地執行正則表達式......我應該注意到「XYZ」實際上是以美元符號開始的。 – user1738853

+0

使用'\ $'轉義美元,即'sed's/\ $ XYZ/\ n $ XYZ/g'' – dogbane

1

perl

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

版本簡化。 –

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 
相關問題