从unix中多个子目录中的相同命名文件中删除空白行

时间:2012-05-21 16:34:20

标签: unix removing-whitespace

我在不同的子目录中有多个具有相同名称的文件(> 1000)

dir1 / out.txt

   # white row
    1 2 3 4 5
    3 3 4 5 6 
    4 1 4 5 8
    # white row

dir2 / out.txt

 # white row  
    1 2 3 4 5
    3 3 4 5 6 

    4 1 4 5 8
    # white row 

dir3 / out.txt

# white row 
1 2 3 4 5
3 3 4 5 6 
4 1 4 5 8
# white row 

我想删除所有空格(通常在标题行,尾部行和行之间。

在Unix中有快速的方法吗? Apolozie简单的问题。

编辑:

我不是要删除每个空间而只是删除整个白色空间

2 个答案:

答案 0 :(得分:1)

要仅删除空白行,请使用

sed -i '/^$/d' file

要删除包含空格的空白行,请使用

sed -i '/^[[:blank:]]*/$' file

要从文件中删除所有空格,请使用

sed 's/ //g' file > file.new && /bin/mv file.new file

这是一个空格字符,如果空格可能包含制表符,则使用

sed 's/[[:blank:]]//g' file

如果您在Linux上使用GNU sed,那么您可以

sed -i 's/[[:blank:]]//g' file

如果您想删除空白行,请添加

 sed -i 's/[[:blank:]]//g;/^$/d' file

您将所有这些包装在find cmd中,以获取您的文件名,如

 cd $baseDir ; find . -name '*.txt' -print | xargs sed -i 's/[[:blank:]]//g;/^$/d' {}

仅使用第一部分

 find . -name '*.txt' -print 

然后调整,直到看到正确的文件名列表出现。

然后通过强制查找输出只有1个测试文件名作为输出来测试下半部分,即

 find . -name 'myTestOut.txt' | xargs ...

我现在没有一种简单的方法来测试这个问题,但每天都会在S.O.上询问这类问题,按[unix] [linux] [xargs] [sed]进行搜索。

我希望这会有所帮助。

答案 1 :(得分:1)

这将在当前工作目录的子目录中找到名为out.txt的所有文件,并删除包含每个文件行的while-space。

find . -name "out.txt" -exec sed -i '/^$/d' '{}' \;

注意:您必须拥有修改这些文件的写入权限。