wie kann ich die Rohre in ein makefile-shell-Befehl?
Ich habe den folgenden code-Schnipsel in ein Makefile, das schlägt immer fehl, es sei denn, Entferne ich die Verweise auf sed & grep unten.
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)
Dies ist die Fehlermeldung die ich bekomme:
/bin/bash: -c: line 0: unexpected EOF while looking for matching `"'
/bin/bash: -c: line 1: syntax error: unexpected end of file
Was falsch sein könnte?
- Möglicherweise ein Duplikat der stackoverflow.com/questions/2382764/escaping-in-makefile
- Nur zur info, die beiden Aufrufe von sed und einer von grep können kombiniert werden in eine Instanz der sed:
sed -ne '/^\s*$$/!{s/^\s*//;s/\s*$$//;p;}'
Die ersten Muster hält Raum-nur leere Zeilen aus, die geändert oder angezeigt werden. (Ich habe verdoppelt das $s für die stellen nutzen, natürlich.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fehler aus
sed
. Wenn Sie schreiben:machen, erweitert die variable
$/
auf einen leeren string, so sed fehlt, ist ein Trennzeichen. Versuchen:Mit
$"
verursacht das gleiche problem ingrep
. Verwendengrep -v "^\s*$$"
statt.