Unix

2010-06-09 23 views
26

'daki eko ve kediyi birleştirmek Gerçekten basit bir soru, kabuktaki eko ve kediyi nasıl birleştirebilirim, bir dosyanın içeriğini önceden eklenmiş bir dizeyle başka bir dosyaya yazmaya çalışıyorum?Unix

Eğer/tmp/dosya şuna benzer:

this is a test 

Bunu çalıştırmak istiyorum: böylece

echo "PREPENDED STRING" 
cat /tmp/file | sed 's/test/test2/g' > /tmp/result 

/tmp/sonuç şuna benzer:

PREPENDED STRINGthis is a test2 

Teşekkürler.

cevap

30

Bu çalışması gerekir:

echo "PREPENDED STRING" | cat - /tmp/file | sed 's/test/test2/g' > /tmp/result 
+3

Bu basitliği beğendim, ancak bütünlük için başka bir cevapta da belirtildiği gibi yankıdaki -n bayrağı bulunmalıdır. – Dan

+6

'cat' arsında '-' hakkında merak eden herkes için:" FILE olmadan veya FILE olduğunda ", man sayfalarından. \ – SooDesuNe

+2

' -n' bayrağı çalışmıyor echo'nun tüm değişkenleri, ancak bu çoğunlukla tarihsel bir nottur. – reinierpost

11

Dene: çıktı >/tmp/result yönlendirme için tek akışı gibi görünüyor böylece

(printf "%s" "PREPENDED STRING"; sed 's/test/test2/g' /tmp/file) >/tmp/result 

parantez bir kabuktaki içindeki komutu (ler) çalıştırın.

2

Veya sadece sadece ayrıca

sed -e 's/test/test2/g 
s/^/PREPEND STRING/' /tmp/file > /tmp/result 
+0

2 '-e's: sed -e/s/test2/g '-e'/^/PREPEND STRING/'... –

+0

dizeyi giriş dosyasının her satırına başlatacaktır. –

+0

İstenen ne olabilir. Değilse: 'sed' 1s/^/PREPENDED STRING /; s/test/test2/g '/ tmp/file>/tmp/result' –

0

Veya sed kullanın:

{ echo "PREPENDED STRING" ; cat /tmp/file | sed 's/test/test2/g' } > /tmp/result 
+0

"Kedi" nin gereksiz şekilde kullanılması, ör. Bu da işe yarar: "{echo" HAZIRLANMIŞ STRING "; sed 's/test/test2/g'; } < /tmp/file >/tmp/result' – reinierpost

0

Başka bir seçenek:

gawk 'BEGIN {printf("%s","PREPEND STRING")} {gsub(/test/, "&2")} 1' in > out 
0

: Her hat için gereken sadece görünür bir kez değil, Başa eklenen dizeyi varsayarak Bu e-posta göndermek için varsa, CRLF satır sonlarını kullanmayı unutmayın:

echo -e 'To: [email protected]\r' | cat - body-of-message \ 
| sed 's/test/test2/g' | sendmail -t 

Bildirimi -e -flag ve dize içinde r \ .

Ayarlama: Bu şekilde bir döngüde size dünyanın en basit toplu posta göndericisini verir.