Shell三剑客之sed-33道练习题

借助以下文本内容作为示例讲解:

vim a.txt

lgpp-cbsp       48049/tcp               # 3GPP Cell Broadcast Service Protocol
isnetserv       48128/tcp               # Image Systems Network Services
ielsleter       48128/udp               # Image Systems Network Services
blp5            48129/tcp               # Bloomberg locator
clp5            48129/udp               # Bloomberg locator
kom-bardac-dw   48556/tcp               # com-bardac-dw
com-bac-dw      48556/udp               # com-bardac-dw
iqobject        48619/tcp               # iqobject
matahari        49000/tcp               # Matahari Broker
blp5            48130/tcp               # Bloomberg locator

Let's go

#1)打印匹配 blp5 开头的行
sed -n '/^blp5/p' a.txt

#2)打印第一行
sed -n '1p' a.txt

#3)打印第一行至第三行
sed -n '1,3p' a.txt

#4)打印奇数行
sed -n '{p;n}' a.txt

#5)打印匹配行及后一行
sed -n '/blp5/,+1p' a.txt

#6)打印最后一行
sed -n '$p' a.txt

#7)不打印最后一行
sed -n '$!p' a.txt

#8)匹配范围
sed -n '/blp5/p;/clp5/p' a.txt

#9)引用系统变量
a=1
sed -n ''$a'p' a.txt

#10)删除第一行
sed '1d' a.txt

#11)删除第一行至第三行
sed '1,3d' a.txt

#12)删除匹配行
sed '/blp5/d' a.txt

#13)删除最后一行
sed '$d' a.txt

#14)去除 http.conf 文件空行或开头#号的行
sed '/^$/d;/^#/d' /etc/httpd/conf/httpd.conf

#15)替换 blp5 字符串为 test
sed 's/blp5/test/' a.txt

#全局替换加 g: 
sed 's/blp5/test/g' a.txt

#16)使用&命令引用匹配内容并替换
sed 's/blp5/&ookk/' a.txt

#17)对 1-4 行的 blp5 进行替换
sed '1,4s/blp5/test/' a.txt

#18)对匹配行进行替换
sed 's/48129\/udp/44444\/tcp/' a.txt

#19)分组使用,在#前添加 test
sed -r 's/(.*)(\b[0-9]+\b\/)(udp|tcp)(.*)(#.*)/\1\2\3\4test\5/' a.txt

#20)将协议与端口号位置调换
sed -r 's/(.*)(\b[0-9]+\b)\/(udp|tcp)(.*)/\1\3\/\2\4/' a.txt

#21)位置调换
#替换 x 字符为大写:
echo "xyz" | sed -r 's/(.*)x(.*)/\1X\2/'

#456 与 cde 调换: 
echo "abc:cde;123:456" | sed -r 's/([a-z]+):([a-z]+)\;([0-9]+):([0-9]+)/\1:\4\;\3:\2/'

#22)注释匹配行后的多少行
sed '/blp5/,+3s/^/#/' a.txt

#23)注释指定多行
sed -r '/^3|^5/s/^/#/' a.txt

#24)去除开头和结尾空格或制表符
echo "      a b c          " | sed '/^[ \t]*/s///;/[ \t]*$/s///'

#25) 多重编辑在blp5 上一行添加 test,在 blp5 下一行添加 test
sed -e '/blp5/i test' -e '/com-ba/a test' a.txt

#26)将 blp5 替换新行
sed '/blp5/c lalalalala' a.txt

#27)在指定行下一行添加一行
sed '1a lalalala' a.txt

#28)在指定行前面和后面添加一行
sed -e '1a after line one' -e '1i before line one' a.txt

#29)读取文件并追加到匹配行后
sed '/com/r b.txt' a.txt

#30) 将匹配行写到文件
sed '/blp5/w c.txt' a.txt

#31)打印匹配的下一行
sed -n '/asu/{n;p}' a.txt

#32)打印偶数
sed -n '{n;p}' a.txt

#33)打印奇数
sed -n '{p;n}' a.txt

 

你可能感兴趣的:(Shell)