2017-02-22 2 views
1

Ich bin neu in bash, und ich versuche, eine Zeile in einer Datei zu löschen, die ich erstelle.Was ist los mit diesem Sed? (Versuche, eine Zeile zu löschen)

So ohne weiteres:

if [[ $(ls -1 | grep 'fichiers.toCheck' | wc -l) -eq 0 ]]; then 
touch fichiers.toCheck 
fi 

find . -name '*.mp4' > fichiers.toCheck 

while read p; do 
    echo $p 
    sed -i "$p/d" ./fichiers.toCheck 
done <fichiers.toCheck 

Console gibt mir dies:

sed: 1: "./fichiers.toCheck": invalid command code . 

ich sed bin Verdacht interpretiert die "/" in der Zeile als Argument (die Linie ist etwas, wie“./nosound.mp4" .

Was ist Ihre Vermutung?

bearbeiten 2 = die korrekte Syntax wa s mit -i.bak

sed -i.bak "[email protected][email protected]@" fichiers.toCheck 

edit = also hier ist meine Experimente:

while read p; do 
    echo $p 
    sed -i "/$p/d" fichiers.toCheck 
done <fichiers.toCheck 

Und ich bekomme:

sed: 1: "fichiers.toCheck": invalid command code f 
sed -i "@[email protected]" fichiers.toCheck 

und gleichen Fehler:

sed: 1: "fichiers.toCheck": invalid command code f 
+0

Die Syntax n'd' ist, zum Beispiel '15d' oder'/'regexp'/d', zum Beispiel'/Blondie/d'. – AlexP

+0

Ich habe meinen Beitrag bearbeitet, um Ihnen zu antworten! – petaire

+0

Übrigens können Sie prüfen, ob eine Datei nur mit 'if [[! -e Datei]], dann drücke Datei; fi' oder in einer Zeile '[[! -e Datei]] && touch file' –

Antwort

1

Ihre sed Syntax ist falsch, eine Linie, die ein Muster aus einer bash Variable zu löschen. Verwenden Sie auch FreBSD native sed in OS X verwenden Sie die -i.bak für In-Place-Bearbeitungen.

sed -i.bak "/$p/d" fichiers.toCheck 

Wenn Sie vermuten, dass Ihr Variable / Änderung des sed Separator @ enthält und verwenden Sie den traditionellen Muster s/<pattern>/<replacement>/ Stil mit dem Ersatzteil-Set zu leer, dh

sed -i.bak "[email protected][email protected]@" fichiers.toCheck 
+0

Ich habe meinen Beitrag bearbeiten, um Sie zu beantworten! – petaire

+0

@Kenneth: Es war eine falsche Syntax, versuchen Sie 'sed -i.bak" s @ $ p @@ " fichiers.toCheck ' – Inian

+0

Mmm hat immer noch den ungültigen Befehlscode f:/BTW Ich bin auf macOS, weiß nicht, ob das etwas ändert aber ... – petaire