grep,过滤关键字信息数据。主要是用于查文本内的数据
sed ,对文本数据进行编辑,修改原文件内容
awk,对文件数据过滤,提取,并且能实现,格式化输出
awk对文件数据处理后,还能更美观的展示数据
sed是什么
sed软件本身
sed提供的加工的命令
给sed提供的源数据
在文件第二行后,插入数据,”今天又是美好的一天”#sed '2 a "今天又是美好的一天" ' t1.logMy name is yuchao.I teach linux."今天又是美好的一天" I like play computer game.My qq is 877348180.My website is http://www.yuchaoit.cn在第二行前,插入数据sed '2 i 今天雾霾比较大' t1.logsed多行增加增加的数据存在换行cat实现多行文本追加cat >>my.log<<EOF你好我好他也好EOFecho 追加多行数据用法如下#echo -e "hello\nworld\n你好\n我也好" > hello.log#cat hello.log helloworld你好我也好sed追加多行文本cat、还是echo,都只能往文件末尾追加内容。而sed是按行处理文本,可以指定要处理的行,也就是在指定行插入字符数据。使用\n添加多行数据给t1.log 开头,添加两行数据加油奥力给#sed -i '1 i 加油\n奥力给' t1.log#cat -n t1.log 1 加油 2 奥力给 3 My name is yuchao. 4 I teach linux. 5 I like play computer game. 6 My qq is 877348180. 7 My website is http://www.yuchaoit.cn练习sed追加配置文件信息(单行)1.练习,修改nginx配置文件,在第39行插入新数据 listen 81;只修改,且终端上看到修改结果,但是不修改文件sed '39 i listen 81;' /etc/nginx/nginx.confsed -i '39 i listen 81;' /etc/nginx/nginx.conf修改sshd_config实战
例如我们在系统初始化优化时,需要修改sshd服务端设置,需要加入如下多行配置Port 25515 # 改端口PermitRootLogin no # 不允许root登录PerminEmptyPasswords no # 不允许空密码UseDNS no # 不做主机名解析,加速ssh连接GSSAPIAuthentication no # 不做主机名解析,加速ssh连接修改配置之前先备份源文件源文件 /etc/ssh/sshd_config备份,添加ori后缀cp /etc/ssh/sshd_config{,.ori}sed写入多行配置 在开头加入这些配置sed -i '1 i Port 25515\nPermitRootLogin no\nPerminEmptyPasswords no\nUseDNS no\nGSSAPIAuthentication no' /etc/ssh/sshd_configsed删除字符数据d 删除指定的行d 命令,表示删除字符,delete意思sed默认是多行处理所有文本,如果不指定范围,sed默认是删除所有文本行数据了sed 删除第二行数据#sed '2 d' t1.logsed删除1到4行sed '1,4d' t1.log关于sed处理文件行范围语法
语法是用分号,隔开多个命令,多次删除sed ‘1 d;2 d;4d;’ t1.log删除game的行sed ‘/game/d’ t1.log删除game和http的行
也就是删除了2个指定的行sed ‘/game/d;/http/d’ t1.log删除My开头的行sed ‘/^My/d’ t1.logsed忽略大小写的指令
sed提供了 大写的I 指令 用于忽略大小写sed ‘/^My/Id’ t1.log删除以.结尾的行sed ‘/.$/d’ t1.log删除第二行到qq的行sed ‘2,7d’ t1.log
sed ‘2,/qq/d’ t1.log删除2和5两行sed ‘2d;5d’ t1.log删除2到5行sed ‘2,5d’ t1.log删除3到尾行sed ‘3,$d’ t1.log删除偶数行(步长)seq 1 10 | sed ‘2~2d’删除奇数行(步长)seq 1 10 | sed ‘1~2 d’感叹号取反Id sed的忽略大小写命令!d 结果取反除了有字符yuchao的行,其他都删除#sed '/yuchao/!d' t1.log My name is yuchao.My website is http://www.yuchaoit.cn删掉除了My开头的行sed ‘/^My/!d’ t1.logsed修改数据替换整行命令(c)c 把选定的行改为新的文本。把11行替换为新数据 , 睡醒了 精神很饱满语法sed ' 11 c 睡醒了,精神很饱满 ' t1.log替换文件的第二行,改为 “I love linux , python !”整行全部替换sed '2c I love linux , python !' t1.log替换字符(s命令)sed替换的命令解释这个分隔符,常见有如下形式sed 's/old_string/new_string/'sed 's#old_string#new_string#'sed 's@old_string@new_string@'强烈建议用# sed 's#old_string#new_string#'替换一次sed 's/替换前字符/替换后字符/' file全局替换,global 全局替换sed 's/替换前字符/替换后字符/g' files 将每一行第一处匹配的字符替换 s/old_string/new_string/sed 's#i#I#' t1.logg 全局替换global,每一行,每一处匹配的字符都替换 s/old_string/new_string/sed 's#i#I#g' t1.logsed 's/i/I/g' t1.log-i 选项、参数,直接修改文件sed默认是修改内存中的模式空间数据,不会修改源文件,使用-i会修改源文件,修改磁盘上的文件数据。测试数据My name is yuchao. you can call me yuchao.I teach linux.I like play computer game.My qq is 877348180.My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/字符yuchao改为老于
替换一次#sed 's#yuchao#老于#' t1.log My name is 老于. you can call me yuchao.I teach linux.I like play computer game.My qq is 877348180.My website is http://www.老于it.cn , and another website is https://www.yuchao.top/替换多次,全局替换sed 's#yuchao#老于#g' t1.log 替换第三行的computer改为linuxsed ‘3 s#computer#linux#g’ t1.log所有的My改为His
指定my开头注意,sed提供了忽略大小写的命令,大写的 I注意大小写不加忽略大小写命令的写法sed 's#^My#His#' t1.log添加忽略大小写的命令sed 's#my#His#Ig' t1.lognew_name="彭于晏"注意单引号、双引号的对变量的解析作用#sed "s#yuchao#$new_name#g" t1.logsed分组替换注意别忘了扩展正则 -r参数语法:sed软件也提供了 \(\)分组功能使用\1引用第一个括号的数据\2引用第二个括号的数据sed最多记住9个分组() \1向后引用分组数据提取出welcome这个单词echo 'I am teacher yuchao,welcome my linux course' | sed -r 's/^.*,(.*)m.*/\1/g'welcome分组取出ip\s 表示单个空格去头去尾法#ifconfig ens33 | sed -e '2s/^.*inet//' -e '2s/netmask.*//p' -n 192.168.0.242 分组提取法
必然用-n取消默认打印,目的是,只看到你想p打印的那些数据打印第二行sed ‘2 p ‘ t1.log打印前三行sed ‘1,3p’ t1.log -n只显示qq号那一行#sed -r '/{9}/p' t1.log -nMy qq is 877348180. my num is 1555555555.找出http和linux的行-e 多次编辑#sed -e '/http/p' -e '/linux/p' t1.log -nI teach linux.My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/#sed '/http/p;/linux/p' -n t1.log I teach linux.My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/sed其他命令w命令作用是将sed操作结果,写入到指定文件sed '/模式/w new_file' old_file必须,找出computer这一行,数据写入到game2.log文件中sed '/computer/w game2.log' t1.log -n替换文件中所有的yuchao为老于,新数据写入 yu.logsed ‘s#yuchao#老于#gw yu.log’ t1.log -n-e选项-e选项用于接上sed多个命令
提取1,2,4行信息语法sed -e 'sed命令' -e 'sed命令' -e 'sed命令'sed -e '1p' -e '2p' -e '4p' t1.log -n; 分号分号也用于执行多条命令,和linux基础命令一样支持这种写法。单独提取出1,2,4行信息sed ‘1p;2p;4p’ t1.log -n
sed -e ‘1p’ -e ‘2p’ -e ‘4p’ t1.log -n链接:https://www.cnblogs.com/btcm409181423/p/18016756#top(版权归原作者所有,侵删)本文链接:https://www.yunweipai.com/46970.html