每一个成功人士的背后,必定曾经做出过勇敢而又孤独的决定。
放弃不难,但坚持很酷~
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
命令格式
sed [options] 'command' file(s)
指定行号添加内容
# 在第三行的上方添加一行字符串
sed -i "3i\test123" aa.txt
# 在第三行的下方添加一行字符串
sed -i "3a\ceshi456" aa.txt
匹配行之后在其上方/下方添加内容
# 在vrrp_instance VI_1下方插入内容
sed -i '/vrrp_instance VI_1/a\ notify_master \"/etc/keepalived/xmha/keepalived.sh master\"\n notify_backup \"/etc/keepalived/xmha/keepalived.sh backup\"\n track_script {\n check\n }' keepalived.conf
# 在vrrp_instance VI_1上方插入内容
sed -i '/vrrp_instance VI_1/i\vrrp_script check {\n script \"/etc/keepalived/xmha/checkServer.sh\"\n interval 10\n}\n' keepalived.conf
解读:
# 输出文件所有内容
sed -n '1,$p' /etc/hosts
# 将每行内容放到一行上进行展示,每行内容以逗号进行分隔。
sed ':t;N;s/\n/,/;b t' /etc/hosts
# 输出第二行到第四行之间三行的内容
sed -n "2,4p" /etc/hosts
解读:
$p
为最后一行的意思,'1,$p'
,是选择打印第一行到最后一行。必须用单引号表示,双引号会报错。
sed -i "s/http:\/\/.*/http:\/\/$ip:$1\";/g" app.js
app.js的局部内容
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://10.6.6.71:9200";
解读:
动态替换全文匹配http://
行之后的内容。\
为转义符,用来转义/
。.*
代表所有内容。
sed -i "5s/port:.*/port: $2,/g" ../Gruntfile.js
Gruntfile.js的局部内容
connect: {
server: {
options: {
port: 9100,
base: '.',
keepalive: true
}
}
}
解读:
替换第4行的匹配的port
之后的内容,.*
代表所有内容。
sed -i "/notify_master \"\/etc\/keepalived\/xmha\/keepalived.sh master\"/,+4d" keepalived.conf
# 远程主机删除文件内容
ssh 10.6.6.72 "sed -i '/notify_master \"\/etc\/keepalived\/xmha\/keepalived.sh master\"/,+4d' /etc/keepalived/keepalived.conf"
# 有特殊符号的行应该如何匹配删除
sed -i "/.*30 1 \* \* \* root sh \/etc\/keepalived\/xmha\/checkFile.sh/d" /etc/crontab
解读:
如果匹配字符串中有*
、/
等特殊符号时,就需要转义符\
来转义。
本篇文章主要描述了sed命令的基本用法,如何对文件内容进行增删改查,并附上了我自己工作上遇到的小例子。当然,sed命令博大精深,我不可能每个用法都能兼顾,如果还想继续拓展的话,可以访问http://man.linuxde.net/sed学习sed更多用法。