如何从多行变量中删除几行?
我从Expect中得到了这类东西,需要整理一下
$var='
total 20
drwxr-xr-x 5 drew.jess users 4096 2013-01-22 15:51 bash
drwxr-xr-x 2 drew.jess users 4096 2011-11-11 10:37 diff
drwxr-xr-x 8 drew.jess users 4096 2012-02-14 09:09 expect
drwxr-xr-x 3 drew.jess users 4096 2011-10-06 11:05 perl
drwxr-xr-x 3 drew.jess users 4096 2013-02-07 13:10 python
drew ~ $
';
那些空白的行代表了我所拥有的。理想情况下,我想让$var看起来像这样:
$var='
total 20
drwxr-xr-x 5 drew.jess users 4096 2013-01-22 15:51 bash
drwxr-xr-x 2 drew.jess users 4096 2011-11-11 10:37 diff
drwxr-xr-x 8 drew.jess users 4096 2012-02-14 09:09 expect
drwxr-xr-x 3 drew.jess users 4096 2011-10-06 11:05 perl
drwxr-xr-x 3 drew.jess users 4096 2013-02-07 13:10 python
';
我应该澄清一下;对我来说,这条问题的重要部分是删去以下一行:
drew ~ $
我想我能科普得了空白。
5条答案
按热度按时间nimxete21#
您可以使用正则表达式替换:
\s*
将匹配换行符,但也会匹配其他您可能不想要的空格。^
和$
以及行锚的开始和结束。/m
修饰符允许锚点在字符串内部匹配,在行的开始/结束(例如在新行处)。46scxncf2#
像
s/^[^\S\n]*\n//gm
这样的正则表达式将删除所有只包含空格的行。更新
如果你想做的不仅仅是删除空行,那么最好是将字符串
split
成行,并删除你不想要的行。这段代码使用grep
删除全是空格的行,然后使用pop
删除最后一行。输出
aurhwmvo3#
从this perlmonks answer
$var =~ s/(^|\n)[\n\s]*/$1/g;
有很多方法可以做到这一点。在我看来,没有问题,只是循环和删除空行。
6ovsh4lw4#
你可以像处理单行字符串一样简单地修剪空格,然后添加一个终止换行符:
muk1a3rh5#
为了不使用正则表达式的另一种解决方案,您可以在循环中使用
chomp
: