“Sed skill”的版本间的差异
跳到导航
跳到搜索
小 (导入1个版本) |
|||
(未显示同一用户的25个中间版本) | |||
第1行: | 第1行: | ||
+ | == 站内资源== | ||
+ | [[Shell常用技能]] | ||
==常用== | ==常用== | ||
+ | <pre> | ||
sed -i "s/netstat/\/usr\/bin\/netstat/g" check.sh #还有一种不能转义的 是# ? | sed -i "s/netstat/\/usr\/bin\/netstat/g" check.sh #还有一种不能转义的 是# ? | ||
− | ==!== | + | #在每行最后添加 , |
+ | sed -i "s/$/&,/g" youfile | ||
+ | |||
+ | 删除前N个空格用 vim ctr+v 然后大学X | ||
+ | |||
+ | 删除前所有空格用 sed s/[[:space:]]//g filename 删除空格 | ||
+ | |||
+ | |||
+ | |||
+ | sed /^$/d filename 删除空行 | ||
+ | |||
+ | 删除前N个字符 | ||
+ | sed -i 's/^..//' file (N个‘.’表示N个字符) | ||
+ | |||
+ | |||
+ | |||
+ | 在每行的头添加字符,比如"sudo -u apache ",(注意有个空格在最后的)命令如下: | ||
+ | sed "s/^/sudo -u apache &/g" file | ||
+ | |||
+ | 去掉file中的前 (n个.) n个字符 | ||
+ | sed -i 's/^...//' file | ||
+ | |||
+ | |||
+ | |||
+ | </pre> | ||
+ | |||
+ | |||
+ | [[Sed删除或者替换有关键字的一行]] | ||
+ | |||
+ | ==! and sed支持使用自定义分隔符== | ||
<pre> | <pre> | ||
[root@localhost ~]# cat /var/spool/cron/root | [root@localhost ~]# cat /var/spool/cron/root | ||
第13行: | 第45行: | ||
[root@localhost ~]# cat /var/spool/cron/root | [root@localhost ~]# cat /var/spool/cron/root | ||
#* * * * * /root/check.sh | #* * * * * /root/check.sh | ||
+ | |||
+ | |||
+ | 写脚本需要替换json串中的路径 脚本如下: | ||
+ | |||
+ | path=/root/baixw/test | ||
+ | | ||
+ | sed -i "s/path=.*/path=$path/g" ./sed_path.txt | ||
+ | |||
+ | #正确使用办法 | ||
+ | path=/root/baixw/test | ||
+ | sed -i "s?path=.*?path=$path?g" ./sed_path.txt | ||
</pre> | </pre> | ||
+ | [https://juejin.cn/post/6994075540181221407 sed替换路径字符串遇到的问题] | ||
+ | |||
+ | == sed输出文件的指定行 输出指定的段落== | ||
+ | <pre> | ||
+ | sed -n '1,2p' infile #print line 1 to 2 | ||
+ | |||
+ | sed ‘/pattern/!p’ infile //匹配pattern的行不输出 | ||
+ | |||
+ | sed -n ‘2,$p’ file //print line 2 to end of line | ||
+ | </pre> | ||
+ | |||
+ | ==每行的头添or 行尾加字符 == | ||
+ | <pre> | ||
+ | |||
+ | 在每行的头添加字符,比如"HEAD",命令如下: | ||
+ | |||
+ | sed "s/^/HEAD&/g" test.file | ||
+ | |||
+ | eg sed "s/^/huagui\//g" file # 在每行首加 huagui/ | ||
+ | |||
+ | |||
+ | 在每行的行尾添加字符,比如“TAIL”,命令如下: | ||
+ | |||
+ | sed "s/$/&TAIL/g" test.file | ||
+ | </pre> | ||
+ | |||
==sed 指定行后添加行== | ==sed 指定行后添加行== | ||
<pre>在29行之后添加 | <pre>在29行之后添加 | ||
第34行: | 第103行: | ||
==[[Sed删除或者替换有关键字的一行]]== | ==[[Sed删除或者替换有关键字的一行]]== | ||
+ | == 追加 sed在文本第一行和最后一行添加字符串== | ||
+ | <pre> | ||
+ | shell在文本第一行和最后一行添加字符串 | ||
+ | sed '1i 添加的内容' file #这是在第一行前添加字符串 | ||
+ | sed '$i 添加的内容' file #这是在最后一行行前添加字符串 | ||
+ | sed '$a添加的内容' file #这是在最后一行行后添加字符串 | ||
+ | |||
+ | |||
+ | |||
+ | sed 's!^!truncate table &!g' tablist >taball | ||
+ | 8916 cat taball | ||
+ | 8917 sed 's/$/&;/g' taball | ||
+ | 8918 sed 's/$/&;/g' taball >good | ||
+ | </pre> | ||
+ | |||
+ | [https://blog.csdn.net/knowledgeaaa/article/details/18810347 sed向文件末尾添加内容] | ||
+ | |||
+ | ==追加不太像== | ||
+ | <pre> | ||
+ | |||
+ | 所有192.168.0.1 开头的行都被替换成它自己加localhost 192.168.0.1localhost | ||
+ | sed 's/^192.168.0.1/&localhost/' filename | ||
+ | |||
+ | |||
+ | evan@myxps:~/tmp$ cat e.txt | ||
+ | i1111 | ||
+ | 2222 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | 3333 | ||
+ | evan@myxps:~/tmp$ sed -i -n 's/^i1/&love/p' e.txt | ||
+ | evan@myxps:~/tmp$ cat e.txt | ||
+ | i1love111 | ||
+ | |||
+ | </pre> | ||
==sed 使用shell变量 == | ==sed 使用shell变量 == | ||
如果要使用shell变量,就需要使用双引号 | 如果要使用shell变量,就需要使用双引号 | ||
− | = | + | =see also= |
+ | [[Sed删除或者替换有关键字的一行]] | ||
+ | |||
+ | [[Sed技巧按日期提取日志]] | ||
+ | |||
+ | =Reference= | ||
[https://blog.csdn.net/stpeace/article/details/46730991 sed基本用法简介] | [https://blog.csdn.net/stpeace/article/details/46730991 sed基本用法简介] | ||
+ | |||
+ | [https://blog.csdn.net/chenwei19870313/article/details/52469870 sed处理替换字符中的特殊字符] | ||
+ | |||
+ | [https://blog.csdn.net/whatday/article/details/105903716 linux shell sed命令 在文本每行 行尾 或 行首 添加字符] | ||
[http://kodango.com/sed-and-awk-notes-part-2 Sed and awk 笔记之 sed 篇:模式空间与地址匹配] | [http://kodango.com/sed-and-awk-notes-part-2 Sed and awk 笔记之 sed 篇:模式空间与地址匹配] | ||
第46行: | 第162行: | ||
[https://baike.xsoftlab.net/view/595.html Linux使用sed删除和替换文件中某一行的方法] | [https://baike.xsoftlab.net/view/595.html Linux使用sed删除和替换文件中某一行的方法] | ||
+ | |||
+ | |||
+ | [https://www.cnblogs.com/liujiaxin2018/p/14984096.html linux系统中sed命令提取指定的行 ] | ||
+ | |||
+ | [https://blog.csdn.net/qq_48168706/article/details/123271906 三剑客之sed特点] | ||
+ | |||
+ | [https://blog.csdn.net/jiecxy/article/details/77539766 sed替换成换行符/回车符] | ||
[[category:ops]] [[category:shell]] | [[category:ops]] [[category:shell]] |
2022年12月8日 (四) 06:04的最新版本
目录
站内资源
常用
sed -i "s/netstat/\/usr\/bin\/netstat/g" check.sh #还有一种不能转义的 是# ? #在每行最后添加 , sed -i "s/$/&,/g" youfile 删除前N个空格用 vim ctr+v 然后大学X 删除前所有空格用 sed s/[[:space:]]//g filename 删除空格 sed /^$/d filename 删除空行 删除前N个字符 sed -i 's/^..//' file (N个‘.’表示N个字符) 在每行的头添加字符,比如"sudo -u apache ",(注意有个空格在最后的)命令如下: sed "s/^/sudo -u apache &/g" file 去掉file中的前 (n个.) n个字符 sed -i 's/^...//' file
! and sed支持使用自定义分隔符
[root@localhost ~]# cat /var/spool/cron/root */2 * * * * /root/check.sh [root@localhost ~]# sed -i 's!*/2!#*!' /var/spool/cron/root [root@localhost ~]# cat /var/spool/cron/root #* * * * * /root/check.sh 写脚本需要替换json串中的路径 脚本如下: path=/root/baixw/test sed -i "s/path=.*/path=$path/g" ./sed_path.txt #正确使用办法 path=/root/baixw/test sed -i "s?path=.*?path=$path?g" ./sed_path.txt
sed输出文件的指定行 输出指定的段落
sed -n '1,2p' infile #print line 1 to 2 sed ‘/pattern/!p’ infile //匹配pattern的行不输出 sed -n ‘2,$p’ file //print line 2 to end of line
每行的头添or 行尾加字符
在每行的头添加字符,比如"HEAD",命令如下: sed "s/^/HEAD&/g" test.file eg sed "s/^/huagui\//g" file # 在每行首加 huagui/ 在每行的行尾添加字符,比如“TAIL”,命令如下: sed "s/$/&TAIL/g" test.file
sed 指定行后添加行
在29行之后添加 sed -i '29a user=mysql' /etc/my.cnf sed -i '29a character-set-server=utf8' /etc/my.cnf sed -i '29ainnodb_file_per_table=1' /etc/my.cnf
sed删除指定行的注释
#ln36 sed -i -e '36 s/^#//' file
#ln1 to ln6
sed -i -e '1,6 s/^#//' file
sed 替换并插入
sed -i 's!old!new!' filename
Sed删除或者替换有关键字的一行
追加 sed在文本第一行和最后一行添加字符串
shell在文本第一行和最后一行添加字符串 sed '1i 添加的内容' file #这是在第一行前添加字符串 sed '$i 添加的内容' file #这是在最后一行行前添加字符串 sed '$a添加的内容' file #这是在最后一行行后添加字符串 sed 's!^!truncate table &!g' tablist >taball 8916 cat taball 8917 sed 's/$/&;/g' taball 8918 sed 's/$/&;/g' taball >good
追加不太像
所有192.168.0.1 开头的行都被替换成它自己加localhost 192.168.0.1localhost sed 's/^192.168.0.1/&localhost/' filename evan@myxps:~/tmp$ cat e.txt i1111 2222 3333 evan@myxps:~/tmp$ sed -i -n 's/^i1/&love/p' e.txt evan@myxps:~/tmp$ cat e.txt i1love111
sed 使用shell变量
如果要使用shell变量,就需要使用双引号
see also
Reference
linux shell sed命令 在文本每行 行尾 或 行首 添加字符