如何删除文本文件的空白?

时间:2017-02-16 17:47:47

标签: linux bash shell grep

我想删除某些文本文件中的所有空行。我可以用:

grep '[^[:blank:]]' < file1.dat > file1.dat.nospace

但我需要在目录中使用n文件。我该怎么办?

任何帮助将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:3)

您可以将其与find

一起使用
find . -name '*.dat' -exec sed -i.bak '/^[[:blank:]]*$/d' {} +

答案 1 :(得分:1)

这个oneliner可能会帮助你:

for a in /path/to/file_pattern*; do sed "/^\s*$/d" $a > $a.nospace;done

答案 2 :(得分:1)

这是一种方式:

for filename in *.dat; do
  grep '[^[:blank:]]' < $filename > $filename.nospace
done

这是一种更强大的方式,可以在更多种情况下使用:

find . -maxdepth 1 -type f -name "*.dat" | while read filename; do
  grep '[^[:blank:]]' < "$filename" > "$filename.nospace"
done

这里有一种更快的方式(在执行时间,但也在打字时)。这是我实际做的方式:

find *.dat -printf "grep '[^[:blank:]]' < \"%f\" > \"%f.nospace\"\n" | sh

这是一个更强大的版本:

find . -maxdepth 1 -type f -name "*.dat" -printf "grep '[^[:blank:]]' < \"%f\" > \"%f.nospace\"\n" | sh

ps:这是非空行的实际正确grep:

grep -v '^$' < $filename > $filename.nospace