Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何删除文本文件的空白?_Linux_Bash_Shell_Grep - Fatal编程技术网

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

Why
grep
当可以使用简单的
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
选项