Bashから一致しない行を削除する

Bashから一致しない行を削除する

以下を含むテキストファイルがあります。

Today, 12:34https://...
Today, 12:43https://...
Yesterday, 13:21https://...
Nottoday, 12:32https://

「今日」または「昨日」と一致しないすべての行を削除しようとしています。

このフォーラムでモードが1つしかないsedコマンドを見つけ、「today」行のみを含むテキストファイルに対して次のことを試みました。

sed -n '/Yesterday/p' file.txt

または

sed '/Yesterday/!d' file.txt

しかし、何も削除されません。 「今日」または「昨日」を含まないすべての行を削除する方法を教えてください。

ベストアンサー1

Sedはファイルを変更しません(フラグが提供されていない限り-iこれを提供する実装について)。以下のようにファイルを読み込み、標準出力に書き込みます。

$ sed -n '/Yesterday/p' file.txt
Yesterday, 13:21https://...
$ cat file.txt
Today, 12:34https://...
Today, 12:43https://...
Yesterday, 13:21https://...
Nottoday, 12:32https://

TodayNorと一致しないすべての行を削除するには、YesterdayEdエディタを使用できます。

printf '%s\n' 'v/Today\|Yesterday/d' w q | ed -s file.txt

v逆方向グローバルコマンドなので、一致しないか削除された行はすべてd削除されます。変更を作成して終了します。 Edのフラグはサイレントモードで実行されます。TodayYesterdaywq-s

-iフラグと一緒にSedを使用することもできます。

sed -n -i '/Yesterday\|Today/p' file.txt

おすすめ記事