• grep 和 sed:linux经常使用工具 & 基本正則表達式


    grep 见链接:http://www.cyberciti.biz/faq/grep-regular-expressions/

    sed參考文章:http://www.thegeekstuff.com


    sed工作原理

    This is called as one execution cycle. Cycle continues till end of file/input is reached:
    1. Read a entire line from stdin/file.
    2. Removes any trailing newline.
    3. Places the line, in its pattern buffer.
    4. Modify the pattern buffer according to the supplied commands.
    5. Print the pattern buffer to stdout.


    sed使用语法:

    sed [-nefri] [命令]
    描写叙述:
    -n :使用安静(silent)模式。在一般 sed 的使用方法中,全部来自 STDIN 的数据一般都会被列出到终端上。

    但假设加上 -n 參数后。则仅仅有经过sed 特殊处理的那一行(或者动作)才会被列出来。
    -e :直接在命令列模式上进行 sed 的动作编辑。
    -f :直接将 sed 的动作写在一个文件内。 -f filename 则能够运行 filename 内的 sed 动作。
    -r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
    -i :直接改动读取的文件内容。而不是输出到终端。

    匹配的的格式(行号,模式字符串):

    ADDRESS(行号):

    n : 匹配第几行
    m,n : 从m到n行
    m~n :从m行開始。每隔n行
    '$' : 最后一行

    PATTERN(字符串):

    /sometext/ : 匹配有sometext字符串的行


    sed -n 'ADDRESS'p filename  // print, e.g: sed -n '4'p text.txt。

    'ADDRESSp',即将p放在单引號中也是能够的。或者将单引號换成双引號"ADDRESSp"也是一样,下同。 sed -n '/PATTERN/p' filename // e.g: sed -n '/aa/p' text.txt sed -n 'ADDRESS'd filename //delete,不会删除文件里的内容。仅仅是在标准输出中删除该行。

    sed -n '/PATTERN/d' filename sed 'ADDRESS a some text' filename //append,在匹配行的下一行加入"some text",注意单引號 sed '/PATTERN/ a some text' filename sed 'ADDRESS i some text' filename // insert,在匹配行前插入一行 sed '/PATTERN/ i some text' filename sed 'ADDRESS c some text' filename // 替换匹配行 sed 'PATTERN c some text' filename sed -n 'ADDRESS'= filename //打印匹配的行号, 仅仅接受一个地址,假设打印多行使用{}括起来,例如以下 sed -n 'ADDRESS,/PATTERN/ { = p }' filename


    运行多条sed命令

    sed -e: use multiple -e options to build up a script out of many parts。


    -e option is optional for sed with single command. sed will execute the each set of command while processing input from the pattern buffer

    -e script, --expression=script

        add the script to the commands to be executed
    

    样例:
    sed -e 's/foo/bar/' -e '/FOO/d'
    解释:先用bar替换foo,然后再删除有字符串FOO的行


    sed 正則表達式查找和替换

    's' 命令应该是sed中最重要的命令,语法例如以下:

    sed 'ADDRESSs/REGEXP/REPLACEMENT/FLAGS' filename
    sed 'PATTERNs/REGEXP/REPLACEMENT/FLAGS' filename

    样例:

    sed '1s/aa/bb/' text.txt        //用bb替换aa。仅仅在aa第一次出现的地方进行替换
    sed '2s/aa/bb/' text.txt    //用bb替换aa,仅仅在aa第二次出现的地方进行替换
    sed 's/aa/bb/g' text.txt    //用bb替换aa。g(global )是全局替换的意思。不加g默认也是全局替换。
    sed -n 's/aa/bb/gpw result.txt' text.txt    //g全局替换,p打印,w将替换结果写到result.txt文件里
    
    sed 's/...$//' text.txt        //正則表達式匹配:将最后位置的前三个字符替换为空。即删除每行的最后三个字符。

    基本正則表達式

    . : 代表随意单个字符

    演示样例: a.b : 表示acb/a*b/a b/a9b… 都能够但不能是accb/ab

    [] : 指定范围内的单个字符

    演示样例: a[c|d]b : 表示acb/adb 其它的都不能够

    [^ ] : 取反。非指定范围内的单个字符

    演示样例:a[^d]b : 表示除了adb 其它的acb/abb/a b…都能够

    ? : 反复前边的字符0次或1次

    演示样例:a?b : 表示ab/aab 其它的都不能够

    * : 反复前边的字符无限次

    演示样例:a* : 表示a/aa/aaa/aaaa… 能够反复a无限次

    .* : 随意长度的随意字符

    演示样例:a.* : 表示a/ac/acc/a,b … 能够是a后边跟随意字符

    {m,n} : 反复前边的字符至少m次,最多n次。必须加上反斜杠转义

    演示样例:a{1,3} : 表示 a/aa/aaa 能够反复a最少1次最多3次

    {m,} : 反复前边的字符至少m次,必须加上反斜杠转义

    演示样例:a{2,} : 表示aa/aaa/aaaa… 能够反复a最少2次最多不限

    {0,n} : 反复前边的字符最多n次,必须加上反斜杠转义

    演示样例:a{0,3} : 表示 空/a/aa/aaa 能够反复a最多3次也能够不反复也就是空

    {m} : 反复前边的字符精确匹配m次,必须加上反斜杠转义

    演示样例:a{2} : 表示 aa 精确匹配反复a2次

    ^ : 行首匹配,必须出如今行首

    演示样例:^a : 表示全部以a开头的行

    $ : 行尾匹配。必须出如今行尾。注意词尾与行尾的差别

    演示样例:a$ :表示全部以a结尾的行

    ^$ : 空白行

    < : 词首匹配。必须出如今词首

    演示样例:< a : 表示a/acv/abcc… 全部以a开头的单词

    > : 词尾匹配,必须出如今词尾,注意词尾与行尾的差别

    演示样例:a> : 表示a/cda/cca/… 全部以a结尾的单词

    () : 分组字符,可用1引用左数第一个(中包括的内容

    演示样例: a(abc)1 表示:aabcabc 1引用了()中的abc

    [ :upper: ] : 单个随意大写字母,注意[]与:之间有个空格,下同

    演示样例:a[:upper:] 表示:aA/aB/aC… a后边跟随意一个大些字母

    [ :lower: ] : 单个随意小写字母

    [ :space: ] : 单个空白字符

    [^[ :space: ]] : 单个非空白字符

    [ :digit: ] : 单个随意数字0-9

    演示样例:a[:digit:]b 表示: a0b/a1b/a2b… a和b中间跟随意一个0-9的数字

    [ :alpha: ] : 单个随意字母

    [ :alnum: ] : 单个随意字母或数字

    [:punct:] : 单个随意特殊符号

    扩展正則表達式元字符:
    扩展正則表達式简化了基本正则中的一个元字符。又添加了几个。
    {m,n} → {m,n} : 使用方法与基本正则中的一样

    演示样例:a{1,3} 表示: a/aa/aaa

    () → () : 使用方法与基本正则中的一样

    演示样例:(abc)1 表示:abcabc

    + : 匹配前边的字符一次或多次

    演示样例:a+ 表示: a/aa/aaa/aaaa…

    | 表示或

    演示样例:(a|b)c 表示: ac/bc

  • 相关阅读:
    年末反思
    Flink运行时架构
    Phoenix 启动报错:Error: ERROR 726 (43M10): Inconsistent namespace mapping properties. Cannot initiate connection as SYSTEM:CATALOG is found but client does not have phoenix.schema.
    Clickhouse学习
    Flink简单认识
    IDEA无法pull代码到本地,Can't Update No tracked branch configured for branch master or the branch doesn't exist.
    第1章 计算机系统漫游
    简单的 Shell 脚本入门教程
    开源≠免费 常见开源协议介绍
    MySQL 视图
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5223027.html
Copyright © 2020-2023  润新知