基本上我有一个目录和子目录需要扫描以查找 .csv 文件。从那里我想将所有包含“foo”的行从找到的csv复制到新文件(与原始文件在同一目录中),但名称反映了它所在的文件。
到目前为止我有
find -type f -name "*.csv" | xargs egrep -i "foo" > foo.csv
这会产生一个包含所有内容的备份文件 (foo.csv),并且找到它的位置是数据的一部分。这两个我都不想要。
我想要的是:
例如,如果我有:
csv1.csv
csv2.csv
并且它们都有包含“foo”的行,我希望将这些行复制到:
csv1_foo.csv
csv2_foo.csv
除了原始文件中包含“foo”的整行之外,我没有在备份中输入任何额外内容。即我不想要备份数据中的原始文件名,这是我当前的代码所做的。
另外,我想我应该注意我使用的是 egrep,但我的示例没有使用正则表达式。当我将正则表达式应用于我的特定场景时,我将在搜索中使用它,因此在命名新文件时可能需要考虑到这一点。如果这看起来太难了,那么不考虑正则表达式的答案就可以了。
提前谢谢!