regex bash sed删除文件末尾的所有空格和空行

lf5gs5x2  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(142)

我发现这是为了删除脚本How to remove trailing whitespaces with sed?结尾的空格,但它并没有完全达到我的期望。当我想到删除所有白色时,我想做的是删除所有空行-我认为这个sed只是删除空格和制表符,但它可以扩展到从文件末尾删除任何空行吗?也许这是不可能做到这一点与一行,也许有更好的方法来实现这一点,任何选择都是伟大的。
另外,我认为这应该用更改替换文件,这对吗?我只是不确定我的测试是否会发生这种情况。

sed -i 's/[ \t]*$//' ~/.bashrc
# -i is in place, [ \t] applies to any number of spaces and tabs before the end of the file "*$"
0dxa2lsx

0dxa2lsx1#

删除文件末尾的所有空格:

perl -0777 -pe 's{\s+\z}{}m' foo > bar

要就地更改文件,请执行以下操作:

perl -i.bak -0777 -pe 's{\s+\z}{}m' foo

将文件末尾的所有空格替换为一个换行符:

perl -0777 -pe 's{\s+\z}{\n}m' foo > bar

要就地更改文件,请执行以下操作:

perl -i.bak -0777 -pe 's{\s+\z}{\n}m' foo

Perl单行程序使用以下命令行标志:
-e:告诉Perl在行内查找代码,而不是在文件中。
-p:一次循环输入一行,默认情况下将其分配给$_。在每次循环迭代后添加print $_
-i.bak:就地编辑输入文件(覆盖输入文件)。在覆盖之前,通过在其名称后附加扩展名.bak来保存原始文件的备份副本。
-0777:Slurp文件完整。
\s+\z:字符串(恰好是整个文件)末尾的一个或多个空格字符(包括换行符)。
正则表达式使用这个修饰符:
/m:允许多行匹配。

另见:

perldoc perlrun:如何执行Perl解释器:命令行开关
perldoc perlre : Perl regular expressions (regexes)

6gpjuf90

6gpjuf902#

这可能对你有用(GNU sed):

sed ':a;/\S/!{$d;N;ba}' file

将空行附加到前一行。
如果空行是最后一行,则删除当前模式空间。
否则打印图案空间。
要从所有行的末尾也删除空格,请执行以下操作:

sed ':a;/\S/!{$d;N;ba};s/ *$//mg' file

或:

sed 'H;$!d;x;s/.//;s/ *$//mg;s/\n*$//' file

相关问题