2013-02-25 30 views
6

Aşağıdaki kod snippet'ini bir Makefile'de yaşıyorum; buradaki referanslar, aşağıda & grep değerine sedye kaldırdığım sürece başarısız olur. Makefile kabuk komutunda boruları nasıl kullanırım?

TAB=$(shell printf "\t") 
all: abstract.tsv 
     $(shell cut -d "${TAB}" -f 3 abstract.tsv | sed "s/^\s*//" | \ 
     sed "s/\s*$//" | grep -v "^\s*$" | sort -f -S 300M | \ 
     uniq > referenced_images.sorted.tsv) 

Bu

hata alıyorum edilir:

/bin/bash: -c: line 0: unexpected EOF while looking for matching `"' 
/bin/bash: -c: line 1: syntax error: unexpected end of file 

Ne yanlış olabilir?

+1

Muhtemelen bir kopyası http://stackoverflow.com/questions/2382764/escaping-in-makefile –

+1

Sadece FYI, sed ve bir grep birinin iki eylemi sed: 'sed -ne bir örneğinde birleştirilebilir '/^\ s * $$ /! {s/^ \ s * //; s/\ s * $$ //; p;}' 'İlk kalıp, yalnızca yer kaplar ve değiştirilmeden boş satırları tutar. görüntülenen. (Elbette, $ 'lerin faydalarından dolayı iki katına çıktım.) – William

cevap

17

sed'dan bir hata geliyor. Eğer yazarken:

sed "s/\s*$//" 

yapmak o kadar sed bir sınırlayıcı eksik, boş bir dizeye değişken $/ genişler. Deneyin:

sed "s/\s*$$//" 

kullanma $"grep aynı soruna neden oluyor. Bunun yerine grep -v "^\s*$$" kullanın.