美文网首页
\# linux命令sed,awk,grep

\# linux命令sed,awk,grep

作者: Nickier | 来源:发表于2018-10-19 23:49 被阅读246次

    ---------------

    #################

    Nickier

    2018-10-19

    #################

    ---------------

    # linux命令sed,awk,grep


    sed

    简介

    sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

    使用格式

    sed [-hnV][-e<script>][-f<script文件>][文本文件]
    

    参数说明

    1.-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。

    2.-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。

    3.-h或--help 显示帮助。

    4.-n或--quiet或--silent 仅显示script处理后的结果。

    5.-V或--version 显示版本信息。

    动作说明

    • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
    • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
    • d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
    • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
    • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
    • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法。

    举例

    # 在文件testfile中的第4行后面添加一行newline
    sed -e 4a\newLine testfile
    
    1539951436066.png
    # 将testfile的内容列出来同时打印行号,使用sed '4d'删除第四行
    nl testfile  | sed '4d'
    
    1539951717784.png
    # 显示第5到7行nl testfile  | sed -n '5,7p'
    
    1539952207807.png
    # 搜索关键词hello的行,除了输出所有含,还输出匹配行
    nl testfile  | sed '/hello/p'
    
    1539952524900.png
    # 搜索关键词hello的行,加上-n参数,只输出匹配行
    nl testfile  | sed -n '/hello/p'
    
    1539952719298.png

    awk

    简介

    awk是一个非常好用的数据处理工具。相较于sed常常一整行处理,awk则比较倾向于一行当中分成数个“字段”处理。

    使用格式

    awk '条件类型1{动作1} 条件类型2{动作2} ...' filename
    

    参数说明

    • -F fs or --field-separator fs
      指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
    • -v var=value or --asign var=value
      赋值一个用户定义变量。
    • -f scripfile or --file scriptfile
      从脚本文件中读取awk命令。
    • -mf nnn and -mr nnn
      对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
    • -W compact or --compat, -W traditional or --traditional
      在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
    • -W copyleft or --copyleft, -W copyright or --copyright
      打印简短的版权信息。
    • -W help or --help, -W usage or --usage
      打印全部awk选项和每个选项的简短说明。
    • -W lint or --lint
      打印不能向传统unix平台移植的结构的警告。
    • -W lint-old or --lint-old
      打印关于不能向传统unix平台移植的结构的警告。
    • -W posix
      打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符=不能代替=;fflush无效。
    • -W re-interval or --re-inerval
      允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
    • -W source program-text or --source program-text
      使用program-text作为源代码,可与-f命令混用。
    • -W version or --version
      打印bug报告信息的版本。

    举例

    # 输出第二列,默认分隔符为空格
    awk '{print $2}' 1.txt
    # 以o为切割,并输出第二列
    awk -F"o" '{print $2}' 1.txt
    
    1539954613575.png
    # 使用内建变量,以o为分隔符,输出
    awk 'BEGIN{FS="o"} {print $1,$2}'   1.txt
    
    1539955394226.png
    # 输出第一列大于2的行
    nl 1.txt | awk '$1>2'
    
    1539955600249.png
    # 从文件中找出length大于12的行
    awk 'length>12' 1.txt 
    

    1539955958785.png

    grep

    简介

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。

    参数

    -E :开启扩展(Extend)的正则表达式。

    -i :忽略大小写(ignore case)。

    -v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。

    -n :显示行号

    -w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker

    -c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。

    -o :只显示被模式匹配到的字符串。

    --color :将匹配到的内容以颜色高亮显示。

    -A n:显示匹配到的字符串所在的行及其后n行,after

    -B n:显示匹配到的字符串所在的行及其前n行,before

    -C n:显示匹配到的字符串所在的行及其前后各n行,context

    # 取出含有字符创linux的行
    grep linux 1.txt 
    # 取出含有字符创linux的行,并显示行号
    grep linux 1.txt -n
    # 取出不含有world的行并显示行号
    grep world 1.txt -nv
    
    1539957795629.png

    总结

    awk、sed、grep更适合的方向:

    • grep 更适合单纯的查找或匹配文本

    • sed 更适合编辑匹配到的文本

    • awk 更适合格式化文本,对文本进行较复杂格式处理

    关于awk内建变量个人见解,简单易懂

    解释一下变量:

    变量:分为内置变量和自定义变量;输入分隔符FS和输出分隔符OFS都属于内置变量。

    内置变量就是awk预定义好的、内置在awk内部的变量,而自定义变量就是用户定义的变量。

    • FS(Field Separator):输入字段分隔符, 默认为空白字符

    • OFS(Out of Field Separator):输出字段分隔符, 默认为空白字符

    • RS(Record Separator):输入记录分隔符(输入换行符), 指定输入时的换行符

    • ORS(Output Record Separate):输出记录分隔符(输出换行符),输出时用指定符号代替换行符

    • NF(Number for Field):当前行的字段的个数(即当前行被分割成了几列)

    • NR(Number of Record):行号,当前处理的文本行的行号。

    • FNR:各文件分别计数的行号

    • ARGC:命令行参数的个数

    • ARGV:数组,保存的是命令行所给定的各参数

    自定义变量的方法

    • 方法一:-v varname=value ,变量名区分字符大小写。

    • 方法二:在program中直接定义。

    相关文章

      网友评论

          本文标题:\# linux命令sed,awk,grep

          本文链接:https://www.haomeiwen.com/subject/srhpzftx.html