1

そのようなファイルからアイテムを削除するコマンドを書きたい.todolist:

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

私はcat $path | grep -v $1すべて完璧に動作しますが、ファイルに書き戻そうとすると、ファイルは空のままになります。私は何を間違っていますか?

4

3 に答える 3

1

それと同じくらい簡単です-

path="$HOME/.todolist"
grep -v $1 $path | sponge $path
于 2013-02-25T17:25:52.253 に答える
1

これはもっと簡単かもしれません:

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

これにより、$1 の値を含むファイル内のすべての行が削除されます。-i オプションは、ファイルをその場で編集するように sed に指示します (実際にはそうではありませんが、編集したかのように機能します)。$1 に /s が含まれている場合、エラーが発生しますが、必要に応じて他の区切り文字を使用できます。

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

別の区切り文字を使用する場合は、最初の区切り文字を「\」でエスケープする必要があることに注意してください。

于 2013-02-25T22:06:29.450 に答える
0
path="$HOME/.todolist"
if [ "$task" == "- " ];
then 
    exit 1
fi 
a=$1
export a

perl -pi -e 'undef $_ if(/$ENV{a}/)' $path
于 2013-02-26T02:04:58.823 に答える