zoukankan      html  css  js  c++  java
  • Linux

    Linux sed命令

    sed命令是以理script来处理文本文件。

    sed可依照script指令,来处理、编辑文本文件。它主要是用来自动编辑一个或多个文件,简化对文件的反复操作等。


    语法

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

    sed可选参数:

    • -n:使用安静模式,在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
    • -e:sed将要执行的内容
    • -f:表示在对哪个文件执行sed操作
    • -r:支持扩展表达式
    • -i:直接修改文件内容

    script可选参数

    • a:新增,a后面可以接字符串,而这些字符串会再新的一行出现(目前的下一行)
    • c:取代,c后面可以接字符串,这些字符串可以取代n1,n2之间的行
    • d:删除,后面不接东西
    • i:插入:i后面可以接字符串,而这些字符串会再新的一行出现(目前的上一行)
    • p:打印,将某个选择的数据打印,通常回合sed -n一起运行
    • s:取代,可以使用正则匹配

    例如,在testfile文件的第四行后添加一行,并将结果输出:

    sed -e '4a/newLine testfile'
    

    1. 对行的操作

    1.1. 以行为单位的新增、删除

    例如,将/etc/passwd的内容列出并且打印行号,同时将2-5行删除:

    nl /etc/passwd | sed '2,5d'
    

    sed的动作为'2,5d',d就是删除,2,5就是2到5行,用逗号分隔。

    sed后面接的动作,务必加上两个单引号。

    例如,删除第二行:

    nl /etc/passwd | sed '2d'
    

    例如,删除第三行到最后一行:

    nl /etc/passwd | sed '3,$d'
    

    例如,在第二行后,加上"drink tea":

    nl /etc/passwd | sed '2a drink tea'
    

    如果是在第二行前:

    nl /etc/passwd | sed '2i drink tea'
    

    添加两行及两行以上

    如果要添加两行及两行以上,在第二行后面加入两行字

    nl /etc/passwd | sed '2a Drink tea or > drink beea' 
    

    每一行之间都必须用反斜杠来区分

    1.2. 以行为单位的替换、显示

    例如,将第2-5行的内容取代成为"No 2-5 number":

    nl /get/passwd | sed '2,5c No 2-5 number'
    

    2. 对数据的操作

    2.1. 数据的搜寻、删除

    删除/etc/passwd所有包含root的行,其他行输出(使用/数据/来匹配数据):

    nl /etc/passwd | sed '/root/d'
    

    2.2. 数据的搜寻、执行命令

    搜索 /etc/passwd 找到 root 对应的行,并把bash替换成blueshell,再输出

    nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'
    

    这里讲解下各个参数:

    • /root/:查找root所在的地方
    • /bash/blueshell/:将bash替换成blueshell
    • ;:每个命令之间要用分号分隔,
    • {}:sed不同的编辑命令,用花括号分隔。比如这里其实是两部分,第一部分搜寻root,第二部分替换

    2.3. 数据的搜寻、替换

    基本语法:

    sed 's/要被取代的字符串/新的字符串/g'
    

    因为匹配可以使用正则表达式,所以有很大的灵活性。

    例如搜索出本机的IP:

    ifconfig eth0 | grep 'inet' | sed 's/^.*inet //g' | sed 's/net.*$//g'
    

    2.4. 复合操作

    可以将多条sed操作写在一起来执行。

    写一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换成blueshell

    cat /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
    
  • 相关阅读:
    acceptorThreadCount
    spring boot tomcat 线程数 修改初始线程数 统计性能 每百次请求耗时
    java 获取当前进程id 线程id
    Linux操作系统中打开文件数量的查看方法
    java.io.IOException: Too many open files
    随机采样 算法
    Spring Boot
    您好,python的请求es的http库是urllib3, 一个请求到贵司的es节点,想了解下,中间有哪些网关啊?冒昧推测,贵司的部分公共网关与python-urllib3的对接存在异常?
    运行状态:锁定中(实例空间满自动锁)
    。。。。。。不带http https : 不报错 spring boot elasticsearch rest
  • 原文地址:https://www.cnblogs.com/yisany/p/10400711.html
Copyright © 2011-2022 走看看