您的位置:首页 > 运维架构 > Linux

Linux学习之字符串截取

2016-06-04 16:30 239 查看
1、cut命令

grep是提取符合条件的行,cut是提取符合条件的列。

如果使用cut命令,那么对应的文件内容必须使用制表符进行编辑,因为cut命令的-d选项默认是制表符。如果文件列是通过其他符号进行分割的,需要通过-d进行指定。

cut -f 2 students 表示提取student文件中的第2列。

cut -f 2,4 students 表示提取student文件中的第2列和第4列。

cut -d ":" -f 2,3 /etc/passwd 表示提取文件passwd中的第2列和第3列,由于passwd的列是通过:分割的,所以需要用-d进行指定分隔符。

grep abc 表示包含abc字符串的内容,grep -v abc 则表示不包含abc字符串的内容。-v是取反的意思。

cut命令可以手动指定文件名,也可以通过管道符将命令执行的结果作为截取的对象。例如:cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1

cut命令的局限性在于当文件内容是用多个空格进行分隔时,很难处理正确。



2、printf命令

printf命令后面不能接文件名,也不能接管道符。

如果要输出文件的内容,需要执行 printf "%s" $(cat student.txt) 即把cat student.txt的执行结果作为字符串打印出来。

注意 %s需要用引号括起来,尤其是需要多个%s时,例如 printf "%s %s %s\n" 1 2 3 4 5 6





示例:

第2个命令表示每6个字段一行,每个字段之间用tab分隔符隔开



说明:



3、awk命令

可以没有条件,直接动作。



示例1:

这里没有条件,直接动作。

第1条命令表示输出文件中的第2列和第6列,列与列之间用制表符隔开,每行两列。

第2条命令表示将df -h命令的执行结果中的第1列和第3列输出来,用cut命令无法打印,因为列与列之间是用空格隔开的。

print命令会自动在每行末尾加上换行符。



示例2:

包含两个动作,第一个动作有前置条件,第二个动作没有。

BEGIN表示在读取数据之前,在这里表示在读取数据之前,打印一条信息:This is a transcript



示例3:

END表示在数据读取结束后,在这里表示当所有数据读取完后,打印信息:The End



示例4:

FS用于指定文件内容的分隔符,在这里表示,在读取数据之前将内容的分隔符指定为:



示例5:

| grep -v Name表示过滤掉包含Name字符串的行,因为下面涉及到数值运算,所以需要将标题行去掉。

如果 第6行的值大于等于87,那么就将第2行的值输出。



4、sed命令

sed相当于一个内容编辑器,和vim不同的是,vim只可用来编辑文件内容,而sed不仅可以用来编辑文件内容,还可以将命令的执行结果进行编辑。

例如:df -h | sed -n '2p' 表示将命令执行结果的第2行输出。

注意动作需要用引号括起来。







示例1:

第1条命令会把整个文件内容都输出来,而且会把第二行的内容输出两遍。

第2条命令则只会把第二行内容输出来,因为加了选项 -n



示例2:

‘2,4d’表示删除第2到第4行,包括第3行,是个范围。



示例3:

第2条命令插入的两行数据分别为:hello、world



示例4:

将第2行替换为No such person



示例5:

如果s前面没有加行号,则表示替换整篇文档。

-e 选项表示可以同时进行多项操作,各操作间用;隔开

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: