我有一个包含许多文件的文件夹。我想进入每个文件并导出超过 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
,旧文件将会丢失。