Linux 如何删除文本文件的空白?
我想删除一些文本文件中的所有空行。我可以用:Linux 如何删除文本文件的空白?,linux,bash,shell,grep,Linux,Bash,Shell,Grep,我想删除一些文本文件中的所有空行。我可以用: grep'[^[:blank:]'file1.dat.nospace 但我需要用目录中的n个文件来做。我怎么做 任何帮助都将不胜感激。谢谢 您可以将其与find find . -name '*.dat' -exec sed -i.bak '/^[[:blank:]]*$/d' {} + 您可以将其与find find . -name '*.dat' -exec sed -i.bak '/^[[:blank:]]*$/d' {} + 此onelin
grep'[^[:blank:]'file1.dat.nospace
但我需要用目录中的n个文件来做。我怎么做
任何帮助都将不胜感激。谢谢 您可以将其与
find
find . -name '*.dat' -exec sed -i.bak '/^[[:blank:]]*$/d' {} +
您可以将其与
find
find . -name '*.dat' -exec sed -i.bak '/^[[:blank:]]*$/d' {} +
此oneliner可能会帮助您:
for a in /path/to/file_pattern*; do sed "/^\s*$/d" $a > $a.nospace;done
此oneliner可能会帮助您:
for a in /path/to/file_pattern*; do sed "/^\s*$/d" $a > $a.nospace;done
这里有一个方法:
for filename in *.dat; do
grep '[^[:blank:]]' < $filename > $filename.nospace
done
用于*.dat中的文件名;做
grep“[^[:blank:][]”<$filename>$filename.nospace
完成
以下是一种更为稳健的方法,适用于多种情况:
find . -maxdepth 1 -type f -name "*.dat" | while read filename; do
grep '[^[:blank:]]' < "$filename" > "$filename.nospace"
done
find-maxdepth 1-读取文件名时键入f-名称“*.dat”;做
grep“[^[:blank:][]”<“$filename”>“$filename.nospace”
完成
这里有一种更快的方法(在执行时间上,但在键入方面也更快)。这就是我实际做这件事的方式:
find *.dat -printf "grep '[^[:blank:]]' < \"%f\" > \"%f.nospace\"\n" | sh
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
find-maxdepth 1-键入f-名称“*.dat”-printf“grep”[^[:blank:][]”<\%f\“>\%f.nospace\\n”\sh
ps:以下是非空行的实际正确grep:
grep -v '^$' < $filename > $filename.nospace
grep-v'^$'<$filename>$filename.nospace
以下是一种方法:
for filename in *.dat; do
grep '[^[:blank:]]' < $filename > $filename.nospace
done
用于*.dat中的文件名;做
grep“[^[:blank:][]”<$filename>$filename.nospace
完成
以下是一种更为稳健的方法,适用于多种情况:
find . -maxdepth 1 -type f -name "*.dat" | while read filename; do
grep '[^[:blank:]]' < "$filename" > "$filename.nospace"
done
find-maxdepth 1-读取文件名时键入f-名称“*.dat”;做
grep“[^[:blank:][]”<“$filename”>“$filename.nospace”
完成
这里有一种更快的方法(在执行时间上,但在键入方面也更快)。这就是我实际做这件事的方式:
find *.dat -printf "grep '[^[:blank:]]' < \"%f\" > \"%f.nospace\"\n" | sh
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
find-maxdepth 1-键入f-名称“*.dat”-printf“grep”[^[:blank:][]”<\%f\“>\%f.nospace\\n”\sh
ps:以下是非空行的实际正确grep:
grep -v '^$' < $filename > $filename.nospace
grep-v'^$'<$filename>$filename.nospace
Whygrep
当可以使用简单的sed
命令完成时。请参阅下面我的答案。请注意,这实际上并不是检查空行,仅当行以空白开头时才检查。如果可以使用简单的sed
命令来完成,为什么要检查grep
。请参阅下面我的答案。请注意,这实际上并不是检查空行,仅当行以空白开头时才检查。这不会给出请求的结果-它会下降到子目录中,并重命名原始.bak
,而不是创建新的.nospace
s。但总的来说,这是一种更好的技术,我的基准测试速度是我答案的3倍(7000个文件为3比9,总共73MB)。@webb不,它不重命名文件。它只保留扩展名为.bak
的原始文件,以便在出现问题时OP想要访问原始文件。为了防止下降到子目录中,我们只需在find
中添加-maxdepth 1
选项,这不会给出请求的结果-它会下降到子目录中,并重命名原始文件.bak
,而不是创建新的.nospace
s。但总的来说,这是一种更好的技术,我的基准测试速度是我答案的3倍(7000个文件为3比9,总共73MB)。@webb不,它不重命名文件。它只保留扩展名为.bak
的原始文件,以便在出现问题时OP希望访问原始文件。为了防止降级到子目录,我们可以在查找中添加-maxdepth 1
选项