2016-03-25 27 views
0

Başka bir sorunla uğraşıyorum, bu sefer çıktıyı bir dosyaya yönlendirmekle ilgili (>). Foo-ab.in foo-abc.in foo-abcd.in bar-ab.in bar-abc.in bar-abcd.in gibi bir kaç dosyam var ve her dosyaya geçmek istiyorum, küçük bunun bir kısmı ile sed ve sonra her dosya için foo-ab2.in, foo-abc2.in ve foo-abcd2.in gibi bir şeye sonuçları yeniden yazınız. Ne var bugüne kadar geçerli: giriş çıkış dosyasına yazılan sed output

for file in foo bar; do sed -n 's/text to change/replacement/ p' $file*.in> &1; done 

ancak hatayı alıyorum:

-bash: syntax error near unexpected token `&' 

Ben muhtemelen tüm yanlış yapıyorum anlıyorum, ama ben bunu gerçekleştirmek istiyorum:

for file in foo bar; do sed -n 's/text to change/replacement/ p' $file*.in > $file*2.in; done 

Burada $file*2.in, $file.in ile tam olarak aynı adla 2 eklenir, ancak ab, abc veya abcd sonlarıyla birden çok foo olduğundan Bunu nasıl başaracağımı bilmiyorum. Ben zaten benim sed komutum var, çıktı almak için sadece doğru bir dosya adıdır.

cevap

0

Görünüşe buna benzer bir cevap zaten burada mevcut:

for file in foo*.in bar*.in; do sed -n 's/text to change/replacement p' $file > "${file%.*}"2.in; done 

şimdi girer: wildcard input files

Ama netlik ve soru kapanış uğruna, cevap şöyle komutu değiştirmektir foo-abcd.in dosyası aracılığıyla foo-ab.in dosyasını, sed değişimini yapar ve foo-abcd2.in dosyasını (ve aynı zamanda bar * .in) aracılığıyla foo-ab2.in çıktılarını verir.