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

时间:2014-12-19 10:28:25

标签: unix

我在一个文件夹中有一堆文件,包含一个不受欢迎的特殊字符(#)。

对于一个文件,例如fadg0_si1279.acs这似乎有效,sed 's/#//' fadg0_si1279.acs > a.acs,但在这种情况下,我在重写源文件时遇到了一些困难:尝试将目标编写为与源相同: sed 's/#//' fadg0_si1279.acs > fadg0_si1279.acs,但它返回一个空文件!一切都被删除了!任何关于它为什么会发生的建议,以及如何解决它?

我的下一个问题:有没有办法在整个文件夹中删除该字符? 1340个文件一个接一个地做起来似乎很傻!非常感谢!

2 个答案:

答案 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'
  • 查找 - 将找到文件
  • sed - 将删除文件中的#inplace并在替换之前的同一时间也将创建filename.bak文件。

答案 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#的所有重复发生。