以下を含むテキストファイルがあります。
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://
Today
Norと一致しないすべての行を削除するには、Yesterday
Edエディタを使用できます。
printf '%s\n' 'v/Today\|Yesterday/d' w q | ed -s file.txt
v
逆方向グローバルコマンドなので、一致しないか削除された行はすべてd
削除されます。変更を作成して終了します。 Edのフラグはサイレントモードで実行されます。Today
Yesterday
w
q
-s
-i
フラグと一緒にSedを使用することもできます。
sed -n -i '/Yesterday\|Today/p' file.txt