Solaris 10:从多个文件中删除尾随空白行

Solaris 10:从多个文件中删除尾随空白行

我正在使用 Solaris 10。一次从多个文件中删除空行的最简单方法是什么?

答案1

一个快速的小脚本应该可以工作。我有从 nixCraft 试了一下,效果很好。

#!/bin/sh
files="/home/me/data/*.txt"
for i in $files
do
  sed '/^$/d' $i > $i.out
  mv  $i.out $i
done

$files根据您的需要进行更换。

答案2

删除所有空白行是最简单的:

sed -i.bak '/^$/d' $FILES

这将创建一个扩展名为 的备份.bak,如果您不需要备份,请将其删除。

如果您也想删除带有空格的行(并且仅删除空格),请添加\W*

sed -i.bak '/^\W*$/d' $FILES

这适用于--posixgnu sed 中的选项(关闭 gnu 扩展,所以我认为这应该适用于Solaris):

sed -i.bak '/^[ \t]*$/d' $FILES

如有必要,添加更多空白字符。

答案3

仅删除尾随空行的不同方法:

printf %s\\n "$(cat file)"|sponge file
tac file|awk /./,0|tac|sponge file
perl -0777 -pi -e 's/\n*$/\n/' file
gsed -i ':1;/^\n*$/{$d;N;b1}' file
bsdsed -i '' -e :1 -e '/^\n*$/{$d;N;b1' -e '}' file

命令替换会删除所有尾随换行符,例如echo "$(printf 'a\n\n')b"prints ab

sponge来自 moreutils。

在 BSD 中替换tac为。tail -r

perl -0777设置$_为整个输入并在每行后-p打印。$_man perlrun

:设置标签,b分支到标签,$d删除最后一行的模式空间,并将N下一行追加到模式空间。

GNUsed允许在:and之后使用分号,b但 POSIX 和 BSDsed不允许。-i适用于 GNUsed但不适用于 BSD sed-i ''适用于 BSDsed但不适用于 GNU sed

答案4

您可以使用以下单行命令删除多个文件中的空白行

find directoryname -name "filename" -print | xargs sed -i '/^$/d'

例如,如果您想从当前目录及其子目录中找到的所有文件中删除空行,您可以使用以下命令:

find . -name "*.*" -print | xargs sed -i '/^$/d'

相关内容