当前位置: 首页 > Linux

Shell文本处理三剑客sed

时间:2023-04-06 22:50:49 Linux

sed是streameditor的缩写,一种流编辑器,主要用来处理标准输出或文件。语法:标准输出|sed[option]"patterncommand"sed[option]"patterncommand"file1常用选项(option)#-n只打印静默模式匹配行,不打印原始行#p是打印命令?sed'/hello/p'helloWorld.sh#!/bin/bashHELLObashecho"helloworld"echo"helloworld"?sed-n'/hello/p'helloWorld.shecho"helloworld"#-e添加一组ofeditingcommands?sed-n-e'/hello/p'-e'/HELLO/p'helloWorld.shHELLObashecho"helloworld"#-f将所有编辑命令保存在一个文件中,适合复杂的编辑Action?catedit.sed/hello/p?sed-n-fedit.sedhello.md#-E(or-r)支持扩展正则表达式?sed-n-E'/hello|HELLO/p'helloWorld.shHELLObashecho"helloworld"#-i直接修改源文件的内容#s是替换命令#这里是helloWorld.sh文件,把hello全部改成hello123sed-n-i's/hello/hello123/g'helloWorld.shmatchingmode(pattern)匹配模式说明10command10thline10,20command10thto20thline10,+5command10thto16line/pattern1/command匹配pattern1对应的行/pattern1/,/pattern2/command对应pattern1startfrompattern2的第10行,/pattern1/command从第10行开始,到pattern1的/pattern1/行,10command从pattern1对应的行开始,到第10行line常用编辑命令(command)queryp打印匹配内容addastringappendiafterthelineappendrbeforestringlinereadfromexternalfile,appendwafterthematchinglinenewfile将匹配行写入外部文件deleted删除修改s/old/new用news/old/new/g替换行中的第一个old用news/old/new/2g替换从第2行到文件末尾的所有old用news/old/new/ig将一行中的所有旧字符替换为新字符,忽略大小写示例:#删除以sys开头并以/sbin/nologin结尾的行?sed-i'/^sys.*\/sbin\/nologin$/d'passwd_bak#删除注释行和空行sed-i'/[:blank:]*#/d;/^$/d'passwd_bak#找到以vagrant开头的行,追加下一行?sed-i'/^vagrant/aThisisanadditionalline'passwd_bak#Replaceallrootwithroot123?sed-i's/root/root123/ig'passwd_bak#添加_666到所有以sys开头和以nologin结尾的行的末尾#where&means前面的正则表达式匹配的内容?sed-i's/^sys.*nologin$/&_666/g'passwd_bak#将所有以sys开头,以nologin_666结尾的行改为#以SYS_开头,以_777结尾的行end,其中\1表示前面括号中匹配的中间内容?sed-i's/^sys\(.*\)nologin_666$/SYS_\1_777/g'passwd_bak#将1到10行的所有sys改为ForSYS?sed-i'1,10s/sys/SYS/ig'passwd_bak#统计my.cnf文件中mysqld子配置项的个数#sed找到[mysqld]和下一个[.*]之间的行#grep-v过滤注释、空行和[.*]行#wc-l统计最后的行号sed-n"/^\[mysqld\]$/,/^\[.*\]$/p"/etc/my.cnf|grep-Ev'^$|[#;]|^\[.*'|wc-l注意:如果匹配模式中有变量,建议使用双引号,比如sed-i"s/$OLD_STR/$NEW_STR/g"passwd_bak