如何使用shell脚本将删除的文件行重定向到其他文件

use*_*086 2 shell

我有一个文本文件,其中的字段用','符号分隔.我想删除包含'S'和'A'等图案的行,并将删除的行重定向到其他文件,原始文件不包含已删除的图案.

例如,假设我的文件数据如下:

S,F,T,Y
B,I,J,O
S,O,L,H
R,I,O,P
A,H,K,L
U,I,O,P
A,I,S,U
Run Code Online (Sandbox Code Playgroud)

我将删除这些行,并希望将其存储在单独的文件中,例如delete.txt

S,F,T,Y
S,O,L,H
A,H,K,L
A,I,S,U
Run Code Online (Sandbox Code Playgroud)

和file.txt包含

B,I,J,O
R,I,O,P
U,I,O,P
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下代码

sed -n '/S\|A/p' file.txt > delete.txt
Run Code Online (Sandbox Code Playgroud)

此命令将删除的行删除为delete.txt,但在file.txt中包含已删除的模式

Jon*_*ler 6

在Mac OS X上,sed需要备份选项的参数-i,所以我写了类似的东西:

sed -i .bak -e '/[SA]/{w deleted.txt
           d;}' file.txt
Run Code Online (Sandbox Code Playgroud)

即使使用GNU,也需要文件名后面的换行符sed.