如何删除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#的所有重现。