【问题标题】:remove white space line from same named files in multiple subdirectories in unix从 unix 的多个子目录中的相同命名文件中删除空白行
【发布时间】:2012-05-22 05:25:41
【问题描述】:

我在不同的子目录中有多个同名文件(> 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 简单的问题。

编辑:

我并不是要删除每个空格,而只是删除空白的整行

【问题讨论】:

  • awk,sed:什么都可以。

标签: unix removing-whitespace


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    要删除空行,请使用

    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]

    我希望这会有所帮助。

    【讨论】:

    • 谢谢,当我暗示这是占用文件中的每个空白时,我只想删除完整/整个空白行,而不是分隔列数据的空间
    • 我误解了你的陈述'我想删除所有空格......)。这就是为什么在您的问题中包含所需的输出确实有帮助。如果您想用示例输出更新您的问题,我会尝试回答您的问题。祝你好运。
    • 感谢您的回复,这可能对其他人(想要消除所有空格)有所帮助...我有替代答案,我认为更多地偷走您的时间并不是一个好主意..
    猜你喜欢
    • 2012-10-16
    • 2014-10-19
    • 1970-01-01
    • 2012-09-29
    • 2020-02-15
    • 2016-11-11
    • 2012-01-31
    • 2020-10-23
    • 1970-01-01
    相关资源
    最近更新 更多