• sed -n ‘开始行数,结束行数p’ 被截取文件 > 另存为文件

    sed -n ‘开始行数,结束行数p’ 被截取文件 > 另存为文件

    展开全文
  • 1、cut字段提取命令 cut [选项] 文件名 选项: -f 列号:提取第几列 ...cut命令的不足:cut命令不能截取用不等的空格隔开的数据 综上,cut命令适合于提取比较规则的文件或用制表符分隔的文件,使用...

    1、cut字段提取命令

    cut [选项] 文件名
    选项:
    -f 列号:提取第几列
    -d 分隔符:按照指定分隔符分割列(不指定分隔符的话是默认采用制表符分隔)

    实例1:提取用制表符制作的文件信息

    实例2:提取系统中的普通用户名称(指定的分隔符为冒号)

    cut命令的不足:cut命令不能截取用不等的空格隔开的数据

    综上,cut命令适合于提取比较规则的文件或用制表符分隔的文件,使用起来很简单,但对于用空格分隔的文本,cut命令就很无力,此时就需要使用awk命令。而在使用awk命令之前,必须先得学会使用printf命令。

    2、printf命令

    printf命令与字符提取没有本质的关系,但是它是学习使用awk命令的基础,它是一种输出语句,并且是一种最原始的输出命令(毕竟linux内核是使用c语言写的)。

    printf的基本语法:

    printf '输出类型输出格式' 输出内容    #类似于c语言中的printf函数
    
    输出类型有:
    %ns: 输出字符串。n是数字指代输出几个字符
    %ni: 输出整数。n是数字指代输出几个数字
    %m.nf: 输出浮点数。m和n是数字,分别指代浮点数的总位数(包含小数点)与小数部分的位数
    
    
    输出格式:
    \a:输出警告声音
    \b:输出退格键,也就是Backspace键
    \f:清除屏幕
    \n:换行
    \r:回车,也就是Enter键
    \t:水平输出退格键,也就是Tab键-\v:垂直输出退格键,也就是Tab键

    prinf不支持数据流操作:即不能跟管道符一起使用

    可见printf的操作比较原始,虽然这个命令很麻烦,但因为awk命令只能使用printf及print命令,不能识别echo命令,所以必须掌握,print与printf相比,输出内容时,不用人为的添加换行符 。

    3、awk命令

    awk命令是linux系统中一个非常复杂,功能强大的命令,甚至支持在命令中嵌套流程控制语句,以至于在市面上有专门讲awk命令的书籍,但作为linux系统管理来说,我们掌握它的基本的字符提取功能就ok了,其他知识等参加工作后再边查阅资料边应用足矣。

    awk '条件1{动作1}条件2{动作2}...' 文件名
    
    条件(pattern):
    一般使用关系表达式作为条件
    x>10判断变量x是否大于10
    x>=10大于等于
    x<=10小于等于
    
    动作(action):
    格式化输出
    流程控制语句

    实例1:提取用制表符分隔内容的文件文本

    可见,在实现相同功能的情况下:cut命令要简便的多。

    awk命令的执行原理:

    awk虽然是个字段提取命令,但awk是这样处理的:

    awk首先会将文件的第一行读取出来,然后再awk中判断条件,如果条件满足,则会执行相应的动作,上面的例子由于没有加条件,所以每一行都会执行同第一行一样的动作。这个动作首先执行的动作是,首先将文件名student.txt赋给$0,然后$1是第一个字段,$2是第二个字段……

    然后第二行也重复第一行的动作,将相应字段的内容提取到对应字段中

    实例:提取根分区硬盘使用占比

    BEGIN条件

    awk 'BEGIN{printf "This is a transcript \n"}{printf $2 "\t" $4 "\n"}' student.txt

    BEGIN条件会在所有输出的内容之上,先输出"This is a transcript"

    类似的END条件会在所有的内容后输出"This is a transcript"

    不加BEGIN或END的话,输出结果为:

    FS内置变量

    cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN{FS=":"}{printf $1 "\t" $3 "\n"}'

     

    关系运算符:

    #打印成绩大于70分的人员名单
    cat student.txt | grep -v Name | awk '$4>=70{printf $2 "\n"}'

    结果为:

    4、字符替换命令sed

    想让计算机自动替换文本,就不适合使用具有交互功能的vim等编辑器,sed命令就是这样一个再shell编程中自动替换文本的命令。sed命令是一种几乎包括在所有UNIX平台(包括linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。sed命令的格式为:

    sed [选项] '[动作]' 文件名
    
    选项:
    -n:一般sed命令会把所有数据都输出到屏幕,如果加入此选项则只会把经过sed命令处理的行输出到屏幕。
    -e:允许对输入的数据应用多条sed命令编辑
    -i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
    
    动作:
    a:追加,在当前行后添加一行或多行
    c:行替换,用c后面的字符串替换原数据行
    i:插入,在当前行前插入一行或多行。
    d:删除,删除指定的行
    p:打印,输出指定的行
    s:字串替换,用一个字符串替换另外一个字符串。格式为:"行范围s/旧字串/新字串/g"(和vim中的替换格式类似)

    实例1:打印student.txt文件第二行的数据(注意加了-n与没加-n的区别)

    实例2:删除student.txt文件第二行到第四行的数据,但不修改文件本身

    实例3、在第二行前或第二行后加入数据

    实例4、行替换c

    字符串替换:

    sed 's/旧字串/新字串/g' 文件名
    
    sed -e 's/fengji//g;s/cang//g' student.txt
    #同时把"fengj"和"cang"替换为空

    实例5、字串替换s

    实例6、-i可以改变原始文件内容

    展开全文
  • 【一】第3000开始,显示1000。即显示3000~3999 cat filename | tail -n +3000 | head -n 1000 【二】显示1000到3000 cat filename| head -n3000| tail -n +1000 *注意两种方法的顺序 分解: ...

    【一】从第3000行开始,显示1000行。即显示3000~3999行

    cat filename | tail -n +3000 | head -n 1000

     

    【二】显示1000行到3000行

    cat filename| head -n 3000 | tail -n +1000

     

    *注意两种方法的顺序

     

    分解:

        tail -n 1000:显示最后1000行

        tail -n +1000:从1000行开始显示,显示1000行以后的

        head -n 1000:显示前面1000行

     

    【三】用sed命令

     

     sed -n '5,10p' filename 这样你就可以只查看文件的第5行到第10行。

    展开全文
  • Linux截取文件指定行数之间的内容到指定文件 一、利用vi命令找到文件相关行数据内容 vi filename :set nu 二、sed命令操作文件 sed -n '开始,结束p' filename > newfile ...

                                               Linux截取文件指定行数之间的内容到指定文件

    一、利用vi命令找到文件相关行数据内容

    vi filename
    :set nu

    二、sed命令操作文件

    sed -n '开始行,结束行p' filename > newfile

     

    展开全文
  • Linux字符截取命令-cut

    2016-09-21 00:11:22
    语法cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file]cut 命令文件的每一剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c...

    概述

    cut是一个选取命令,。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的。


    语法

    cut  [-bn] [file] 

    cut [-c] [file]  

     cut [-df] [file]

    cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出

    如果不指定 File 参数,cut 命令将读取标准输入。

    必须指定 -b、-c 或 -f 标志之一。

    cut 默认以制表符为分隔符


    参数说明

    • -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
    • -c :以字符为单位进行分割。
    • -d :自定义分隔符,默认为制表符。
    • -f :与-d一起使用,指定显示哪个区域。
    • -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除。

    cut命令主要是接受三个定位方法:

    • 第一,字节(bytes),用选项-b
    • 第二,字符(characters),用选项-c
    • 第三,域(fields),用选项-f

    这里写图片描述


    cut -b

    [root@entel2 ~]# who
    root     tty1         2016-08-22 06:47 (:0)
    root     pts/2        2016-09-20 18:18 (10.45.35.59)
    root     pts/0        2016-09-20 14:25 (10.45.22.82)

    以下的cut截取都以上数据为准

    提取每一行的第3个字节

    [root@entel2 ~]# who | cut -b 4
    t
    t
    t

    提取第1,第2、第3个字节

    [root@entel2 ~]# who|cut -b 1-3
    roo
    roo
    roo
    
    [root@entel2 ~]# who|cut -b 1,2,3
    roo
    roo
    roo

    -b支持形如1-3的写法,而且多个定位之间用逗号隔开就可以了。

    注意:

    cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。不能颠倒定位的顺序。

    其他:

    -3表示从第一个字节到第三个字节, 而3-表示从第三个字节到行尾。如果你细心,你可以看到这两种情况下,都包括了第三个字节


    如果执行who|cut -b -3,3-,你觉得会如何呢?答案是输出整行,不会出现连续两个重叠的第三个字节的


    cut -b

    [root@entel2 ~]# who|cut -c 1-3
    roo
    roo
    roo

    额 看着怎么和-b没有什么区别啊?莫非-b和-c作用一样?

    其实不然,看似相同,只是因为这个例子举的不好,who输出的都是单字节字符,所以用-b和-c没有区别,如果提取中文,区别就看出来了来。

    汉字本身是双字节的,cut –c把汉字“小”当成一个字符来处理,而cut –b是以字节来处理,把“小”拆成了两个字节,结果是字符被“切成两半”,因此无法正常显示。

    栗子

    [root@entel2 ~]# cat cut.txt 
    周杰伦
    邓紫棋
    薛之谦
    李荣浩
    小工匠

    see ,出问题了吧

    [root@entel2 ~]# cat cut.txt | cut -b 3
    ¨
    
    
    
    
    [root@entel2 ~]# 
    
    [root@entel2 ~]#  cut -b 3 cut.txt 
    ¨
    
    
    
    
    [root@entel2 ~]# 

    换成 -c 来试试吧

    [root@entel2 ~]# cut -c 3 cut.txt 
    伦
    棋
    谦
    浩
    匠

    总结: -c则会以字符为单位,输出正常;而-b只会傻傻的以字节(8位二进制位)来计算,输出就是乱码。


    提高:

    当遇到多字节字符时,可以使用-n选项,-n用于告诉cut不要将多字节字符拆开。

    [root@entel2 ~]# cat cut.txt |cut -b 2
    
    
    
    
    °
    [root@entel2 ~]# cat cut.txt |cut -nb 2
    
    
    
    
    
    [root@entel2 ~]# cat cut.txt |cut -nb 1,2,3
    周
    邓
    薛
    李
    小
    [root@entel2 ~]# 

    cut -f

    为什么会有“域”的提取呢,因为刚才提到的-b和-c只能在固定格式的文档中提取信息,而对于非固定格式的信息则束手无策。

    这时候“域”就派上用场了。如果你观察过/etc/passwd文件,你会发现,它并不像who的输出信息那样具有固定格式,而是比较零散的排放。

    但是,冒号在这个文件的每一行中都起到了非常重要的作用,冒号用来隔开每一个项。

    我们很幸运,cut命令提供了这样的提取方式,具体的说就是设置“间隔符”,再设置“提取第几个域”,就OK了!

    栗子

    数据:以/etc/passwd的前五行内容为例:

    [root@entel2 ~]# head -n 5  /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    提取用户名

    [root@entel2 ~]# head -n 5  /etc/passwd|cut -d : -f 1
    root
    bin
    daemon
    adm
    lp
    [root@entel2 ~]# 

    用-d来设置间隔符为冒号,然后用-f来设置我要取的是第一个域。

    当然,在设定-f时,也可以使用例如3-5或者4-类似的格式:

    [root@entel2 ~]# cat /etc/passwd | head -n 5 | cut -d : -f 1,3-5
    root:0:0:root
    bin:1:1:bin
    daemon:2:2:daemon
    adm:3:4:adm
    lp:4:7:lp

    包含 3 和5 说在的field 。

    遇到空格和制表符时,怎么分辨

    这里写图片描述

    tab制表符 直接 按 tab键即可打出

    [root@entel2 ~]# sed -n l tablespace.txt 
    this is tab\tfinish.$
    this is serveral space      finish.$

    如果是制表符(TAB),那么会显示为\t符号,如果是空格,就会原样显示。
    通过此方法即可以判断制表符和空格了。

    上面sed -n后面的字符是L的小写字母,看清楚了撒

    在cut -d中用什么符号来设定制表符或空格

    cut的-d选项的默认间隔符就是制表符,所以当你就是要使用制表符的时候,完全就可以省略-d选项,而直接用-f来取域就可以了。

    如果你设定一个空格为间隔符,那么就这样:

    [root@entel2 ~]# cat tabspace.txt | cut -d ' ' -f 1
    this
    this
    [root@entel2 ~]# 

    两个单引号之间必须要有一个空格,否则就输出全部内容了

    而且,你只能在-d后面设置一个空格,可不许设置多个空格,因为cut只允许间隔符是一个字符。 多个空格报错如下…

    [root@entel2 ~]# cat tabspace.txt | cut -d '  '  -f 1
    cut: the delimiter must be a single character
    Try `cut --help' for more information.
    You have new mail in /var/spool/mail/root

    cut的缺陷和不足

    处理多空格…..

    如果文件里面的某些域是由若干个空格来间隔的,那么用cut就有点麻烦了,因为cut只擅长处理“以一个字符间隔”的文本内容

    展开全文
  • linux 提取某一内容

    2019-07-17 13:17:54
    截取第一 cat logs| head -n 1 截取最后一 cat logs| tail -n 1 截取第二 cat logs| head -n 2 | tail -n 1 以此类推提取特地的行数据
  • Linux sed命令是利用script来处理文本文件。 sed可依照script的指令,来处理、编辑文本文件。 Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。 Sed可以将数据进行取代、删除、新增...
  • 获取/etc/passwd目录下的UID值小于10的数,并输出第一、三列 [root@:vg_adn_tidbCkhsTest:172.31.30.62 ~]#cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t" $3}' root 0 ...
  • 显示文件X命令:#sed -n 'xp' filename 显示文件X到Y的内容:#sed -n 'x,yp' filename .sed -n 4,8p file #打印file的4-8sed -n 4p file #打印file的第4行linux 如何显示一个文件的某几行...
  • 截取指定之间的日志到新的文件 sed -n '开始行数,结束行数p' 待截取的文件 >> 保存的新文件 例如: sed -n '112,555p' info.log >> new.log
  • 1. 用参数截取字符串 假设有一个变量var=http://blog.csdn.net/sayhello_world 1.1 # 号截取,删除左边字符,保留右边字符。 echo ${var#*//} 其中: var 是变量名,# 号是运算符,*// 表示左边开始删除第一个 //...
  • 需求: linux下对文件按照行数进行切割 实现: sed -n '10,100p' logfile.txt &gt; lognew.txt   摘自:http://www.xhuojia.com/zhuanlan/1891238847.html
  • cutcut命令可以将一文字按照指定字符切分成多段并取出某一段,或者直接指定要取出的字符位置。 格式:cut -d '指定字符' -f数字 //切分并取出指定列 cut -c 区间 //取出指定字符位置的字符串,区间用-表示,如2-4...
  • 用参数截取字符串假设有一个变量var=... echo ${var#*//}其中 var 是变量名,# 号是运算符,*// 表示左边开始删除第一个 // 号及左边的所有字符 即删除 http:// 结果是 :blog.csdn.net/sayhello_world
  • 如果你只想看文件的前100,可以使用head命令,如 head -100 filename 如果你想查看文件的后100,可以使用tail命令,如: tail -100 filename 或 tail -n 100 filename 查看文件中间一段,你可以使用...
  • 一 # 号截取,删除左边字符,保留...其中 var 是变量名,# 号是运算符,*// 表示左边开始删除第一个 // 号及左边的所有字符 即删除 http:// 结果是 :www.linuxidc.com/test.htm 二 ## 号截取,删除左边字符
  • 在集群上跑数据时市场会出问题,为了方便查看日志个人喜欢将日志下载本地使用notepad查看,但是由于集群是公用资源,每一个日志文件都会非常大,如图:不便于下载到本地进行查看,为了可以将你关注的部分日志下载到...
1 2 3 4 5 ... 20
收藏数 32,656
精华内容 13,062