2013-02-25 11 views
6

下記のsed & grepへの参照を削除しない限り、常に失敗するMakefileに次のコードスニペットがあります。makefileシェルコマンドでパイプを使用するにはどうすればいいですか?

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) 

これは私が取得エラーです:

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

間違っている可能性が何?

+1

おそらく、http://stackoverflow.com/questions/2382764/escaping-in-makefileの複製 –

+1

2回のsedの呼び出しとgrepの1つの呼び出しをsedの1つのインスタンスに結合することができます: 'sed -ne '/^\ s * $$ /!{s/^ \ s * //; s/\ s * $$ //; p;}' '初期パターンはスペースのみを保持し、空行は変更されません。表示されます。 (私はmakeの利益のために$ sを倍増しました。) – William

答えて

17

sedから1つのエラーが発生しています。あなたが書くとき:

sed "s/\s*$//" 

makeは空の文字列変数$/を拡大するので、SEDは、区切り文字が欠落しています。試してみてください:

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

grepで同様の問題を引き起こしている$"を使用します。代わりにgrep -v "^\s*$$"を使用してください。

関連する問題