2017-02-22 27 views
1

Я новичок в bash, и я пытаюсь удалить строку в файле, который я создаю.Что случилось с этим sed? (пытается удалить строку)

Итак, без дальнейших церемоний:

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 

Консоль дает мне это:

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

Я заподозрить СЕПГ интерпретирует «/» в строке в качестве аргумента (строка что-то как»./nosound.mp4" .

Что ваше предположение?

редактировать 2 = правильные уа синтаксиса s с -i.bak

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

редактировать = так вот мои эксперименты:

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

И я получаю:

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

и та же ошибка:

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

Синтаксис является n'd', например '15d', или'/'regexp'/d', например'/Blondie/d'. – AlexP

+0

Я редактировал свое сообщение, чтобы ответить вам! – petaire

+0

Кстати, вы можете проверить, существует ли файл с 'if [[! -e файл]], затем нажмите файл, fi' или в одной строке '[[! -e file]] && touch file' –

ответ

1

Ваш синтаксис sed неправильно, чтобы удалить строку, содержащую образец из bash переменной. Кроме того, используя FreBSD родной sed в OS X, используйте -i.bak для редактирования на месте.

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

Если вы подозреваете, что ваша переменная содержит / Смените sed сепаратор для @ и использовать традиционный узор s/<pattern>/<replacement>/ стиль с набором деталей для замены на пустой, т.е.

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

Я отредактировал свое сообщение, чтобы ответить вам – petaire

+0

@ Kenneth: это был неправильный синтаксис, попробуйте 'sed -i.bak 's @ $ p @@" fichiers.toCheck ' – Inian

+0

У Mmm все еще есть неверный код команды f:/BTW Я нахожусь на macOS, dunno, если что-то что-то меняет, но ... – petaire