1. 初识sed

    正则 ^ 匹配紧接的正则表达式,在行或字符串的起始处
    $ 匹配前面的正则表达式,在字符串的末尾活着行的结束。

    sed 's/:.*//' /etc/passwd | sort -u 
    #删除第一个冒号之后的所有东西,并排序列表删除重复部分
    
    find /home/tolstoy -type d -print # 打印此目录下的文件列表
        sed 's;/home/tolstoy/;/home/lt/;' # 替换文件路径
            sed 's/^/mkdir /' # sed添加mkdir
                sh -x # shell执行
  2. sed替换细节

    除了斜杠之外还可以使用其他符号来作为定界符

    sed 's/\/home\/tolstoy\//\/home\/lt\//' # 若只能使用 ‘/’ 作为定界符的时候 会导致命令不易读
    sed 's;/home/tolstoy/;/home/lt/;' # 替换文件路径 用 ‘;’ 作为定界符 命令变得清晰

    在sed中 & 用于匹配“从此点开始替代成匹配与整个正则表达式的整个文本

    sed 's/ata/&, the capital of the south/'  myfile.txt

    在sed中, s命令里以g结尾表示全局替换 不然只会替代匹配到的第一个

    sed 's/toy/weapon/g' myfile.txt # 全局替换
    sed 's/toy/weapon/'  myfile.txt # 单独替换

    通过管道可以将sed实体串联起来 ,-e 选项

    sed -e 's/foo/bar/g' -e 's/chicken/cow/g' myfile.txt # 第一种
    
    cat > fixup.sed
    s/foo/bar/g
    s/chicken/cow/g
    s/china/america/g
    myfile.txt
    crtl+D
    
    sed -f fixup.sed myfile.txt # 第二种
    
    sed -f fixup.sed -e 's/man/women/g' myfile.txt # 第三种
  3. 匹配特定行

    , 范围表达式 ! 否定正则表达式

    sed -n '/<HTML>/p' *.html # 打印含有html标签的行
    sed -n '10,40p' foo.txt # 用‘,’ 表示行范围
    sed '/foo/,/bar/ s/baz/quux/g' foo.xml # 在已foo开始,bar结束的行中进行替换
    
    sed /used/ !s/new/used/g # 将没有used行中的new替换为used

idiot
15 声望3 粉丝

引用和评论

0 条评论