我在不同的子目录中有多个具有相同名称的文件(> 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简单的问题。
编辑:
我不是要删除每个空间而只是删除整个白色空间
答案 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' '{}' \;
注意:您必须拥有修改这些文件的写入权限。