最近换了工作,因为新进公司,工作量比较饱和,学的东西也很多,少有像以前很多的时间学习总结.最近才发现好久没有更新博客,好久没有写收获了,我是简单的程序员,只会记录一些简单的知识点,零零碎碎,但是当某天翻阅起来,也会温故而知新.
linux命令,我用的最多的是grep,一直知道有linux命令中有三剑客grep,sed,awk.我经常使用的grep命令有
ps -ef|grep nginx //查看nginx进程是否还开着的
php -m |grep swoole //查看PHP是否安装了swoole扩展
最近因为工作中要批量替换文件中的字符串 又学到了sed命令,不得不说 用了sed命令后,才发现很强大,比如 有A1,A2,A3,A4........
An个文件,里面都包含 name=hello world ,现在想要替换每个文件中的name=hello world 如何操作??
命令行如下
sed -i "s/name=hello[]world/this is new string/g" `grep "name=hello world" ./ -rl`
sed -i 其中 sed命令中 -i表示修改
/s 表示替换
name=hello[]world 表示要查找的字符串
this is new string 表示要替换的新字符串
/g" 表示一个文件中的全部
`grep "name=hello world" ./ -rl` grep是查找命令, r表示递归 l表示列出 ./表示要查找的目录路径
注意替换的时候若是有 其他特殊字符 记得转义
可是在mac下命令并未执行成功,经过查找资料,得知是mac命令与linux下命令不一样
那么解决办法就是可以在linux下执行相关的命令即可
sed常规用法(即在Linux下运行的方式):
sed -i 'xxx' file
对file文件执行文本替换,具体替换规则根据xxx定义。
但是在Mac系统中运行该指令会报错,原因在于Mac系统中sed指令-i后面需要带一个字符串,该字符串的含义是连接原文件名生成一个新的文件,该文件的内容为文本修改之前的内容。比如
sed -i 'back' 's/str=.*/str="dd"/g' file
执行之后会生成一个新的文件:fileback,文本内容为file修改之前的内容。
如果不想生成这个备份文件,可以把字串定义为空字串,比如
sed -i '' 's/str=.*/str="dd"/g' file
但是不能省略。