ファイルから特定の文字列を含む行を削除する方法

ファイルから特定の文字列を含む行を削除する方法

次のテキストファイルを参照してください。

/home/user1/dir1
/home/user1/dir2
/home/user1/
/home/user1/dir1/dir11

目標は "/home/user1/" だけで他に何もない行を削除することですので、最終結果は次のようになります。

/home/user1/dir1
/home/user1/dir2
/home/user1/dir1/dir11

以下のコードを試しましたが、/home/user1/を含むすべての行が削除されました。何をすべきか知っていますか?

grep -v "/home/user1/" /home/user1/input.txt > tmpfile && mv tmpfile /home/user1/output.txt

答え1

アンカーポイントを使用して、線の開始と終了を表示します(^開始と$終了)。その後、状況は次のようになります。

$ grep -v '^/home/user1/$' file
/home/user1/dir1
/home/user1/dir2
/home/user1/dir1/dir11

または、次の-xオプションを使用できます。

-x, --line-regexp         match only whole lines

それから

$ grep -vx '/home/user1/' file
/home/user1/dir1
/home/user1/dir2
/home/user1/dir1/dir11

あなたのgrepコマンドは予期されたタスクを実行しています。一致するすべての行を見つけます。含む /home/user1/、正確に一致しません。

答え2

sedオプションなら

$ sed -n '\|\(/\([^/]*/\)\{2\}\)\<|p' input_file
/home/user1/dir1
/home/user1/dir2
/home/user1/dir1/dir11

答え3

これがファイルの正確な内容である場合、GNUを使用する簡単な解決策は次のとおりですsed

sed '/^\/home\/user1\/$/d' file

^行の先頭を表示し、$行の終わりを表示するので、正確な文字列だけが一致します。文字列のインスタンス\をエスケープするために使用されます。/

文字列行に末尾のスペースが含まれている場合は、次の方法を使用できます。

sed '/^\/home\/user1\/[[:space:]]*$/d' file

出力:

/home/user1/dir1
/home/user1/dir2
/home/user1/dir1/dir11

要件を満たしている場合は、-iファイルを追加してその場所で編集してください。

sed -i '/^\/home\/user1\/$/d' file

sed -i '/^\/home\/user1\/[[:space:]]*$/d' file

関連情報