如何删除UNIX中某些文件中的字符?

问题描述:

我在文件夹中有一堆文件,其中包含不需要的特殊字符(#)。如何删除UNIX中某些文件中的字符?

对于一个文件,就像fadg0_si1279.acs这似乎工作,:sed 's/#//' fadg0_si1279.acs > a.acs,但在这种情况下,我有重新编写源文件中的一些困难:试图写入目标一样的来源:sed 's/#//' fadg0_si1279.acs > fadg0_si1279.acs,但它返回一个空文件!一切都被删除了!任何为什么会发生的建议,以及如何解决?

我的下一个问题:有没有办法在整个文件夹中删除该字符?对于1340个文件来说,这似乎很难做到!非常感谢!

要做到这一点目录中的递归目录和每个文件:

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' 
  • 发现 - 会发现文件
  • sed的 - 会在替换之前,在文件内移除#inplace,并在同一时间创建filename.bak文件。

在sed可以添加-i来代替就地:

sed -i 's/#//' file 

桑达man-page

在Perl中这将删除所有#从所有文件中的 “文件夹”:

perl -pi -e 's/#//g' /Folder/* 

选项说明:
-p:在您的命令周围放置一个打印循环,以便它的作用是o每个
行标准输入。主要用于这样的Perl可以击败
脱裤子在功率和简单性方面:-)
-i:就地修改您的输入文件。方便地修改文件,而不需要{复制,
删除原始,重命名}过程。
-e:允许您提供程序作为参数,而不是在文件中提供
。您不希望为每个小Perl都创建一个脚本文件

g代表文件中simbol#的所有重现。