sed命令的基本使用方案
发布时间:2021-12-10 17:21:13 所属栏目:教程 来源:互联网
导读:ASP站长网 命令格式解析 1.常见命令选项 -n 屏蔽默认输出 -i 直接修改文本内容 -f 使用sed脚本 -e 可指定多个处理动作 -r 启用扩展正则表达式,若与其他选项一起
ASP站长网命令格式解析 1.常见命令选项 -n 屏蔽默认输出 -i 直接修改文本内容 -f 使用sed脚本 -e 可指定多个处理动作 -r 启用扩展正则表达式,若与其他选项一起使用,应把r放在最前 -{} 可组合多个命令,以分号分割 基本的处理动作 p 打印行 4,6p 输出4,5,6行 4p,6p 输出4行,6行 d 删除行 4,6d 删除4,5,6行 s 字符串替换 s/old/new/ 将每行的第一个old替换成new s/old/new/3 将每行的第三个old替换成new s/old/new/g 将全部的old替换成new 替换操作的分隔符"/"可以用其他字符代替,如&,#,便于修改文件路径 输出文本 sed -n 'p' aa.txt 输出书有行,相当于cat aa.txt相同 sed -n '6p' aa.txt 输出第6行 sed -n '4,7p' aa.txt 输出4,5,6,7行 sed -n '4,+5p' aa.txt 输出第4行以及其后的5行 sed -n '/^root/p' aa.txt 输出以root开头的行 sed -n 'p,n' aa.txt 输出奇数行,n表示读取下一行文本 sed -n 'n,p' aa.txt 输出偶数行,n表示读取下一行文本 sed -n '5,${n,p}' aa.txt 输出从第五行至文件末尾的所有偶数行 sed -n '$=' aa.txt 输出文件的行数 删除文本 sed -n '4,7d' aa.txt 删除4,5,6,7行 sed -n '/bin/d' aa.txt 删除包含bin的行 sed -n '/bin/!d' aa.txt 删除不包含bin的行,!表示取反 sed -n '/^bin/d' aa.txt 删除以bin开头的行 sed -n '/^$/d' aa.txt 删除所有空行 sed -n '/^$/{n;/^$/d}' aa.txt 删除重复空行,连续的空行只保留一个 替换文本 sed -n 's/aa/AA/' aa.txt 将每行中的第一个aa替换成AA sed -n 's/aa/AA/4' aa.txt 将每行中的第4个aa替换成AA sed -n 's/aa/AA/g' aa.txt 将文本所有的aa替换成AA sed -n 's/aa//g' aa.txt 将文本所有的aa替换成空,相当于删除 sed -n 's/aa/&s/g' aa.txt 将文本所有的aa替换成aas,&表示查找到的字符 sed -n '4,6s/^/#/' aa.txt 将文本4,5,6行的开头加上#,相当于注释代码 sed -n '4,6s/^#//' aa.txt 将文本4,5,6行的开头#号去掉,相当于删除注释 sed的文本块处理 操作符 用途 命令示范 i 行前插入文本 2iAA,在第2行前面插入文本行AA 2,4iAA,在第2-4行每行前面插入文本行AA a 行后插入文本 2aAA,在第2行后面插入文本行AA 2,4aAA,在第2-4行每行后面插入文本行AA c 替换当前行 2cAA,把第二行内容替换成AA 导入到处操作 操作符 用途 命令示范 解释 r 读取文本 2r a.txt 在第2行的下面插入a.txt文件 2,4r a.txt 在第2-4行每行下面插入a.txt文件 w 保存到文件 2w a.txt 将第2行的内容保存为a.txt文件 2,4w a.txt 将第2-4行的内容保存为a.txt文件 sed复制剪切 模式空间 -存放当前处理的行,将处理的结果输出 -若当前行不符合处理条件,则原样输出 -处理完当前行再读入下一行进行处理 保持空间 -类似于windows的剪切板 -默认存放一个空行(换行符 n) 基本动作 复制 H:模式空间--->追加--->保持空间 h:模式空间--->覆盖--->保持空间 粘贴 G:保持空间--->追加--->模式空间 g:保持空间--->覆盖--->模式空间 示范 1)把1-3行复制到文件末尾 [root@localhost ~]# cat a.txt 222222 444444444444 [root@localhost ~]# sed '1,3H;$G' a.txt #此处有空行时因为第一次是在保持空间里追加,而保持空间默认有一个空行,注意理解H和h,G和g的区别 222222 444444444444 222222 [root@localhost ~]# sed '1h;2,3H;$G' a.txt #此处没有空行,因为第一次是覆盖保持空间的空行 222222 444444444444 222222 2)把第一行剪切到文件末尾 [root@localhost ~]# sed '1h;1d;$G' a.txt 222222 333333333 444444444444 111 3)把第1,2行剪切到文件末尾 [root@localhost ~]# sed '1h;2H;1,2d;$G' a.txt 333333333 444444444444 111 222222 !取反操作 1)列出不使用bash的用户有哪些 [root@localhost ~]# sed -n '/bash$/!p' /etc/passwd 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 sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 修改启动项 [root@localhost ~]# sed '/^id/s/[0-6]/3/g' /etc/inittab id:3:initdefault: 其他复杂使用 1)删除文件中每行的第二个、最后一个字符 分两次替换操作,第一次替换掉第2个字符,第二次替换掉最后一个字符: [root@localhost ~]# sed 's/.//2;s/.$//' a.txt 2)删除文件中每行的第二个、最后一个单词 分两次替换操作,第一次替换掉第2个单词,第二次替换掉最后一个单词: [root@localhost ~]# sed -r 's/[a-Z]+//2;s/[a-Z]+([^a-Z]*)$/1/' a.txt 3)将文件中每行的第一个、第二个字符互换 每行文本拆分为“第1个字符”、“第2个字符”、“剩下的所有字符”三个部分,然后通过替换操作重排顺序为“2-1-3”: [root@localhost ~]# sed -r 's/^(.)(.)(.*)/213/' a.txt 4)将文件中每行的第一个、第二个单词互换 每行文本拆分为“第1个单词”、“单词分隔”、“第2个单词”、“剩下的所有字符”四个部分,然后通过替换操作重排顺序为“3-2-1-4”: [root@localhost ~]# sed -r 's/([a-Z]+)([^a-Z]*)([a-z]+)(.*)/3214/' a.txt 5)删除文件中所有的数字、行首的空格 因原文件内没有数字,行首也没有空格,这里稍作做一点处理,生成一个新测试文件: [root@localhost ~]# sed 's/o/o7/;s/l/l4/;3,5s/^/ /' a.txt > b.txt 6)删除所有数字、行首空格的操作 [root@localhost ~]# sed -r 's/[0-9]//g;s/^( )+//' a.txt 7)为文件中每个大写字母添加括号 (编辑:焦作站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |