cat /etc/redhat-release
看到操作系统是CentOS Linux release 7.6.1810
,uname -r
看到内核版本是3.10.0-957.el7.x86_64
,sed --version
可以看到sed
版本是4.2.2
。
echo 'a : 1 : good : g' >> sed_daicpnrwq.txt
echo 'b : 2 : well : w' >> sed_daicpnrwq.txt
echo 'c : 3 : food : f' >> sed_daicpnrwq.txt
echo 'd : 4 : hood : h' >> sed_daicpnrwq.txt
echo 'e : 5 : bell : b' >> sed_daicpnrwq.txt
echo 'o : 6 : toll : t' >> sed_daicpnrwq.txt
echo '1 : a : good : g' >> sed_daicpnrwq.txt
echo '2 : b : well : s' >> sed_daicpnrwq.txt
echo '3 : c : food : f' >> sed_daicpnrwq.txt
把下边的内容:
a : 1 : good : g
b : 2 : well : w
c : 3 : food : f
d : 4 : hood : h
e : 5 : bell : b
o : 6 : toll : t
1 : a : good : g
2 : b : well : s
3 : c : food : f
写入到sed_daicpnrwq.txt
里边。
删除
sed '/寻址/d' filename
就是把匹配上的内容所在那行在模式空间删除,然后改变控制流。
sed '/^1/d' sed_daicpnrwq.txt
把以1
开头的一行删除了,但是没有把原文件里边的内容删除。
sed '/^1/d;s/a/#/g' sed_daicpnrwq.txt
没有把删除的那一行中的a
替换成#
,说明改变了控制流。
sed '/^1/d;=' sed_daicpnrwq.txt
把以1
开头的一行删除了之后把行号输出在每行上边,没有把原文件里边的内容删除。
一般先进行其他操作,然后再进行删除操作。
追加
sed '/寻址/a\插入字符' filename
在匹配上的内容下边一行追加,sed '/oo/a\%%%%%' sed_daicpnrwq.txt
匹配上有oo
的行,然后在匹配上的每行下边插入%%%%%
。
插入
sed '/寻址/i\插入字符' filename
在匹配上的内容上边插入,sed '/ll/i\######' sed_daicpnrwq.txt
匹配上有ll
的行,然后在匹配上的每行上边插入######
。
更改
sed '/寻址/c\changestring' filename
把匹配上的每行改写成changestring
。
sed '/well/c\testChange' sed_daicpnrwq.txt
把匹配上的每行都改写成testChange
。
读写文件
echo "4 : d : got : g" >> sed_rfile.txt
echo "5 : e : foot : f" >> sed_rfile.txt
把下边的内容:
4 : d : got : g
5 : e : foot : f
写入到sed_rfile.txt
。
sed '/寻址/r file1' file2
把file2
匹配的每行输出之后,把file2
中的内容输出到匹配上的行之后。
sed '/good/r sed_rfile.txt' sed_daicpnrwq.txt
把sed_rfile.txt
输出到sed_daicpnrwq.txt
匹配到good
的行之后。
下一行
sed '/good/n;/well/d' sed_daicpnrwq.txt
可以转向 good
匹配上的下一行删除well
匹配上的一行,sed '/good/n;/good/d' sed_daicpnrwq.txt
没有删除good
匹配上的行,sed '/good/n;/food/d' sed_daicpnrwq.txt
可以转向匹配good
的下一边删除well
匹配上的一行。
打印行号
sed '=' sed_daicpnrwq.txt
可以打印行号。
打印
sed 'p' sed_daicpnrwq.txt
把所有行都输出一遍。
sed '/^a/p' sed_daicpnrwq.txt
把匹配上的行a : 1 : good : g
输出。
seq
seq
生成数字序列,-s
是指定数字序列之间的分隔符。
seq 1 15
能够生成1
到15
的数字序列。
seq -s "+" 1 15
能够生成1+2+3+4+5+6+7+8+9+10+11+12+13+14+15
的数字序列。
seq 5 -1 1
能够生成从5
到1
数字序列,5是起始数字,-1是步长,即每次减一,1是结束数字。
seq -s "-" 5 -1 1
能够生成5-4-3-2-1
的数字序列。
退出
seq 1 10000 >> seq.txt
生成1
到10000
的数字序列,然后写入到seq.txt
,之后使用tail -n 10 seq.txt
看一下最后10行的内容。
sed '10q' sed_daicpnrwq.txt
只处理到第10行。
在sed
中,q
比p
效率高。
此文章为8月Day 10学习笔记,内容来源于极客时间《Linux 实战技能 100 讲》。