sed(stream editor)是一种非交互式的流编辑器,通过多种转换修改流经它的文本。默认情况下,sed并不会改变原文件本身,而只是对流经sed命令的文本进行修改,并将修改后的结果打印到标准输出中。
sed以行为单位,每处理完一行就立即打印出来,然后处理下一行,直到全文结束。
为了进行sed命令实验,先把Linux的内核打印保存成文件:
$ dmesg >> dmesg.log
s命令:查找与替换
将第一个"Bluebooth"替换为"BLUETOOTH":$ sed 's/Bluetooth/BLUETOOTH/' dmesg.log
将前两个"Bluebooth"替换为"BLUETOOTH":$ sed 's/Bluetooth/BLUETOOTH/2' dmesg.log
将所有"Bluebooth"替换为"BLUETOOTH":$ sed 's/Bluetooth/BLUETOOTH/g' dmesg.log
d命令:删除
删除此文件中的第10行: $sed '10d' dmesg.txt
删除此文件中的第10到100行:$ sed '10,100d' dmesg.log
删除此文件中的第10行到最后一行:$ sed '10,$d' dmesg.log
删除此文件中的最后一行:$ sed '$d' dmesg.log
删除指定行以外的任意行:$ sed '5!d' dmesg.log
删除所有包含Bluetooth的行:$ sed '/Bluetooth/d' dmesg.log
删除空行:$ sed '/^$/d' dmesg.log
使用" -e "参数,可以跟随多个编辑命令:
$ sed -e 's/Blue/BLUE/g' -e 's/tooth/TOOTH/g' dmesg.log
y命令:字符转换
$ sed 'y/USB/123/' dmesg.log
这里会将U转换成1,S转换成2,B转换成3。
i或a命令:插入文本
在第二行前插入" hello world ":$ sed '2 i hello\ world' dmesg.log
在第二行后插入" hello world ":$ sed '2 a hello\ world' dmesg.log
在匹配的上一行插入" hello world ":sed '/ACPI/i\hello\ world' dmesg.log
r命令:读取文本
$ echo "hello\ world" >> new
$ sed '/ACPI/r new' dmesg.log
p命令:打印命令
$ sed -n 's/ACPI/acpi/p' dmesg.log
" -n "表示不打印无关行。
w命令:写入文件
$ sed -n '1,10 w new2' dmesg.log
sed脚本:
可以把sed命令的参数写在文件里,然后使用" sed -f "调用它。
还有一些更强大的sed命令,就不说了,用到的时候再学。这里都是基础命令。sed十分强大,它以行为单位,是处理文本的利器。
文章评论(0条评论)
登录后参与讨论