Linux удаляет текст из файла

Я хочу написать команду с удалением элемента из файла .todolist следующим образом:

path="$HOME/.todolist"
if [ "$task" == "- " ];
then 
    exit 1
fi 
cat $path | grep -v $1 > $path

Когда я cat $ path | grep -v $ 1 работает отлично, но когда я пытаюсь записать его в файл, он оставляет файл пустым. Что я делаю не так?

1
nl ja de
Путь path = "$ HOME/.todolist" неверен. измените его как path = "$ HOME/todolist"
добавлено автор Grijesh Chauhan, источник
то я ошибаюсь
добавлено автор Grijesh Chauhan, источник
.todolist - это имя файла
добавлено автор Ben, источник
Кроме того, вы спрашиваете газиллион раз. Вы клонируете свой файл, вы не должны использовать path как имя переменной и, если не используете cat .
добавлено автор Chris Seymour, источник

3 ответы

Так просто-

path="$HOME/.todolist"
grep -v $1 $path | sponge $path
1
добавлено

Это может быть проще:

sed -ie "/$1/d" $path

Это приведет к удалению любой строки в файле, содержащей значение в $ 1. Параметр -i указывает sed редактировать файл на месте (на самом деле, но он работает так, как если бы он был). Если $ 1 содержит/s, вы получите сообщение об ошибке, но вы можете использовать другие разделители, если вам нужно:

sed -ie "\%$1%d" $path

Обратите внимание, что с помощью альтернативного разделителя вы должны избегать первого с «\».

1
добавлено
path="$HOME/.todolist"
if [ "$task" == "- " ];
then 
    exit 1
fi 
a=$1
export a

perl -pi -e 'undef $_ if(/$ENV{a}/)' $path
0
добавлено
Linux Help
Linux Help
2 686 участник(ов)

Правила: https://telegra.ph/Pravila-Linux-Help-10-15

Linux Security
Linux Security
652 участник(ов)

Данная группа принципиально про безопасность и в частности про безопасность Linux. Прочие темы просим обсуждать в профильных чатах.

Linux Gaming RUS
Linux Gaming RUS
28 участник(ов)

Русскоязычный чатик, посвящённый играм на различных дистрибутивах Linux, а также wine, proton Arch Linux RU @ArchLinuxChatRU Gnome RU @gnome_ru