そのようなファイルからアイテムを削除するコマンドを書きたい.todolist
:
path="$HOME/.todolist"
if [ "$task" == "- " ];
then
exit 1
fi
cat $path | grep -v $1 > $path
私はcat $path | grep -v $1
すべて完璧に動作しますが、ファイルに書き戻そうとすると、ファイルは空のままになります。私は何を間違っていますか?
それと同じくらい簡単です-
path="$HOME/.todolist"
grep -v $1 $path | sponge $path
これはもっと簡単かもしれません:
sed -ie "/$1/d" $path
これにより、$1 の値を含むファイル内のすべての行が削除されます。-i オプションは、ファイルをその場で編集するように sed に指示します (実際にはそうではありませんが、編集したかのように機能します)。$1 に /s が含まれている場合、エラーが発生しますが、必要に応じて他の区切り文字を使用できます。
sed -ie "\%$1%d" $path
別の区切り文字を使用する場合は、最初の区切り文字を「\」でエスケープする必要があることに注意してください。
path="$HOME/.todolist"
if [ "$task" == "- " ];
then
exit 1
fi
a=$1
export a
perl -pi -e 'undef $_ if(/$ENV{a}/)' $path