谁能帮忙解释下linux shell程序中的sed "s/$//;s/ *//g;/^$/d" 这句是什么意思
意思是删除空行,空行包括没有任何字符的空行,和只有若干个空格的空行。
1、s/$// 在每一行后面追加空。
2、s为搜索。
如:s/a/b/
搜索a将替换为b ,并只替换一次。
3、s/ *//g 将空格删除。
4、g代表搜索到的全部替换 。
5、“空格星”( " *") 代理多个空格。
6、/^$/d 删除空行。
扩展资料:
作用
cat file.pl
use Getopt::Std;
use vars qw($opt_d $opt_f $opt_p);
getopts('d:f:p');
print "\$opt_d => $opt_d\n" if $opt_d;
print "\$opt_f => $opt_f\n" if $opt_f;
print "\$opt_p => $opt_p\n" if $opt_p;
然后在命令行中运行:
perl file.pl -d 20040412 -f louiskoochen -p
可得到下列形式的输出:
$opt_d =>200040412
$opt_f =>louiskoochen
$opt_p =>1
解释一下"d:f:p",d和f后有冒号,表示-d,-f后面要跟参数。p后面没有冒号,表示-p后面不带参数。而且-d,-f后所跟的参数分别赋给变量$opt_d和$opt_f。对于变量$opt_p,若命令行加了-p,则$opt_p=1,否则为0。
s/$// 在每一行后面追加空. s为搜索 如s/a/b/ 搜索a 将替换为b ,并只替换一次.
s/ *//g 将空格删除. g代表搜索到的全部替换 。“空格星”( " *") 代理多个空格
/^$/d 删除空行.
举例说明 .
数据文件
-bash-4.1$ cat b.txt
111 123 456
2 abc cbd
444 rts 786
-bash-4.1$
使用sed "s/$//" 处理文件 没有变化
-bash-4.1$ sed "s/$//" b.txt
111 123 456
2 abc cbd
444 rts 786
-bash-4.1$
修改为sed "s/$/AAAA/" b.txt
-bash-4.1$ sed "s/$/AAAA/" b.txt
111 123 456 AAAA
2 abc cbd AAAA
AAAA
444 rts 786AAAA
-bash-4.1$
使用s/ *//g"的结果
-bash-4.1$ sed "s/$//;s/ *//g" b.txt
111123456
2abccbd
444rts786
-bash-4.1$
最后sed "s/$//;s/ *//g;/^$/d"
-bash-4.1$ sed "s/$//;s/ *//g;/^$/d" b.txt
111123456
2abccbd
444rts786
-bash-4.1$