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

时间:2014-07-18 14:02:02

标签: 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

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

S,F,T,Y
S,O,L,H
A,H,K,L
A,I,S,U

和file.txt包含

B,I,J,O
R,I,O,P
U,I,O,P

我尝试使用以下代码

sed -n '/S\|A/p' file.txt > delete.txt

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

2 个答案:

答案 0 :(得分:6)

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

sed -i .bak -e '/[SA]/{w deleted.txt
           d;}' file.txt

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

答案 1 :(得分:1)

一个接一个地发出2个sed命令:

sed -n '/[SA]/p' file.txt > delete.txt
sed -i.bak '/[SA]/d' file.txt