[Shell]sed命令在MAC和Linux下的不同使用方式
----------------------------------------------------------------------------------------------------------------------------
**********************
2017-1-13:初版
**********************
小记:用MAC工作已经三周,本以为已经完全了解MAC与Windows的各种不同,没想到这两天被Shell给摆了一道,mac下的shell和linux下竟然有些许的不同,由此耽误了我3个小时的宝贵时间,特此吐槽,做个整理。
------------------------------------------------------------------------------------------------------------------------------
对于shell小白的我,先看这里比较详细的sed简明教程,针对linux的用法。
MAC和Linux的区别,参考网址:
http://blog.csdn.net/cbbbc/article/details/50474947
错误解决
sed command hits “undefined label” error on Mac OS X
http://www.mkyong.com/mac/sed-command-hits-undefined-label-error-on-mac-os-x/
接下来言归正传,步入正题:
原数据
可以用vi或者vim创建一个test.txt的文本,
dongzhengdeMacBook-Pro:temp dongzheng$ vim test.txt
文本内容如下:
dongzhengdeMacBook-Pro:temp dongzheng$ cat test.txt aaaa bbbb cccc dddd
占位符
在匹配行的前一行或者后一行添加内容
写法:
#匹配行前加 sed -i '/dzblog/inickname' file #匹配行前后 sed -i '/dzblog/athis is my blog address' file
书写时为了方便区分,往往会在i或者a的后面加一个反斜杠。代码就变成:
#匹配行前加 sed -i '/dzblog/i\nickname' file #匹配行前后 sed -i '/dzblog/a\this is my blog address' file
想记住也很简单,a就记忆成after就可以了。
例子:
在第二行即"bbbb"行的下面添加一行,内容为"delon"
Linux命令:
sed '/bbbb/a\delon' test.txt
如果此命令在MAC下输入,会报错:
sed: 1: "/bbbb/a\delon": extra characters after \ at the end of a command
占位符
MAC命令:
➜ Home sed '/aaaa/a\ delon ' test.txt
结果:
aaaa
bbbb
delon
cccc
dddd
在某行的前面添加,只需要把'a'换成'i'即可。
此命令不会在原文件上进行更改,只是会把结果输出到termimal里,如果需要直接更改文件,需要参数 -i
直接替换文件里的指定文本
主要介绍-i和替换文本的方式
Linux命令
#直接将file文件里的printa替换为printb sed -i 's/printa/printb/' test.txt
MAC上的命令当然略有不同,报错为:
sed: 1: "test.txt": undefined label 'est.txt'
MAC命令:
#mac的使用方式sed -ixxx 's/被替换文本/替换文本/' test.txt sed -i.bak 's/printa/printb/' test.txt
-i后面跟字母数字均可,比如说我写的-i.bak,这样的话,会在file的同级目录下,出现一个test.txt.bak的文件,这个文件备份的是文件修改前的内容。
我想mac的设计初衷或许是为了防止sed改错的悲剧,所以必须强制备份。
复制过来,未验证
Linux shell脚本 删除文件中的一行内容
比如:在1.txt里有以下内容:
HELLO=1
NI=2
WORLD=3
I Love China.
Love all....
如果是要删除第三行:
sed -i '3d' 1.txt
如果删除以Love开头的行
sed -i '/^Love/d' 1.txt
删除包含Love的行
sed -i '/Love/d' 1.txt
参考
http://www.360doc.com/content/14/1125/19/7044580_428024359.shtml
有空就学习如下几个命令:
https://zhidao.baidu.com/question/508817260.html?qbl=relate_question_0&word=shell%20%C8%A1%CE%C4%BC%FE%CC%D8%B6%A8%D0%D0%20%CC%ED%BC%D3