使用 grep 重复导出特​​定行到新文件

使用 grep 重复导出特​​定行到新文件

我有一个包含许多文件的文件夹。我想进入每个文件并导出超过 80 个字符的行。

我在用着

grep '.\{80\}' filename > newfilename

但我想一次性对目录中的所有文件执行此操作。我该怎么做才能拥有相同数量的文件?

答案1

根据这个答案 sed可以按长度过滤行:

sed -e '/.\{120\}/!d'

[…] 匹配没有(至少) 120 个字符的行(!表达式后面的是在与其之前的模式不匹配的行上执行命令),并删除它们(即不打印它们)。

sed -i工作到位。这导致了以下方法:

cp -a original_dir/ modified_dir/
find modified_dir/ -type f -exec sed -i -e '/.\{80\}/!d' {} +

现在,中的每个文件original_dir/在中都有其修改后的版本modified_dir/

或者,您可以完全在 内部工作original_dir/,告诉sed使用后缀保存旧文件:

find original_dir/ -type f -exec sed -i.old -e '/.\{80\}/!d' {} +

在这种情况下如果使用-i而不是-i.old,旧文件将会丢失。

相关内容