我在一个文件夹中有一堆文件,包含一个不受欢迎的特殊字符(#)。
对于一个文件,例如fadg0_si1279.acs
这似乎有效,sed 's/#//' fadg0_si1279.acs > a.acs
,但在这种情况下,我在重写源文件时遇到了一些困难:尝试将目标编写为与源相同: sed 's/#//' fadg0_si1279.acs > fadg0_si1279.acs
,但它返回一个空文件!一切都被删除了!任何关于它为什么会发生的建议,以及如何解决它?
我的下一个问题:有没有办法在整个文件夹中删除该字符? 1340个文件一个接一个地做起来似乎很傻!非常感谢!
答案 0 :(得分:1)
在目录和每个文件中以递归方式执行此操作:
find . -type f -print0 | xargs -0 sed -i.bak 's/#/2/g'
在当前目录中执行此操作:
find . -maxdepth 1 -type f -print0 | xargs -0 sed -i.bak 's/#//g'
答案 1 :(得分:1)
在sed中,你可以添加-i来替换就地:
sed -i 's/#//' file
Sed man-page
在perl中,这将从"文件夹":
中的所有文件中删除所有#perl -pi -e 's/#//g' /Folder/*
选项说明:
-p:在命令周围放置一个打印循环,使其作用于每个
标准输入线。主要用于Perl可以击败
在力量和简洁性方面脱裤子:-)
-i:就地修改输入文件。方便修改文件而不需要{copy,
delete-original,rename}进程。
-e:允许您提供程序作为参数而不是
比在文件中。您不想创建脚本
为每个小Perl单行提供文件。
g代表文件中simbol#的所有重复发生。