2012-10-25 22 views
5

aşağıdaki formu sinyallerini üretecek bir dosya var:, gerçekten dolar işareti ile başlamak yokUnix'teki bir metin dosyasından satırları birleştirmek mi?

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

"$ XYZ" öneki her satır için aynıdır ve her yerde gerçekleşmesi pek olası değil ama bir çizginin başlangıcı.

Bu dosyaya erişebilmemin tek yolu, ekran yakalama yoluyla olur ve bu da satırların 80 karakterde sarılmasına neden olur.

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

Bundan bir gerçek hatlarını yeniden istiyorum: (Eğer sarma 80 daha az sayıda olan taklit ise) Yani aşağıdaki gibi görünüyor. Bunu yapmak için bir program yazabilirim, ama bunu bilmediğim bazı Unix komutlarının olabileceğini düşünüyorum. Herhangi bir fikir?

Şimdiden teşekkürler. perl yılında

+0

olduğu gibi neden bir screencapture? – njzk2

+0

Çeşitli düzeylerde çılgın güvenlik izinleri. Bir kediyi yapabilirim, ama onu bir kenara çekebilirim ya da başka bir yere düşünebilirim. – user1738853

+0

Eğer bir terminal öykünücüsünde bir 'cat' yapıyorsanız, istemci tarafında satır sonları eklenmiyor, bu durumda çıktıyı bir şekilde yerel olarak kesebilmeniz gerekir? – lynks

cevap

4

Birincisi, bir uzun hattına tüm satırları birleştirmek ve böyle bir hattın başlangıç ​​olması gerekiyordu sözcüğü gördükleri her yerde daha sonra bir yeni satır ekleyin:

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

Tam olarak bu – lynks

+0

Hayır ile cevap vermek üzereydim, ama belki regexp doğru bir şekilde yapmıyorum çünkü ... Ben "XYZ" aslında bir dolar işareti ile başlar dikkat etmeliydim. – user1738853

+0

dolardan kaçmak için '\ $' kullanın, yani 'sed' ler/\ $ XYZ/\ n $ XYZ/g ' – dogbane

1

:

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

Sürüm basitleştirildi. –

1

paste komut tam olarak bu amaç içindir:

paste -d "" - - 

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

çıkışları

$XYZ blah blah blah 
$XYZ something 
$XYZ random data 
İlgili konular