热度 12
2017-7-11 16:26
1060 次阅读|
0 个评论
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 使用 -i 参数,会直接修改源文件。 使用 -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十分强大,它以行为单位,是处理文本的利器。