有了上面提到的知识,执行批量替换的命令可以写为:
grep "netingcn" -rl /assign-path | xargs sed -i 's/netingcn/www.netingcn/g'
或
sed -i 's/netingcn/www.netingcn/g' `grep "netingcn" -rl /assign-path`
还有一种比较复杂的写法:
grep "netingcn" * -R | awk -F: '{print $1}' | sort | uniq | xargs sed -i 's/netingcn/www.netingcn/g'
其中命令awk用于分割字符串、uniq对结果进行除重。
、网络上现成的资料
格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径`
linux sed 批量替换多个文件中的字符串
sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`
例如:替换/home下所有文件中的www.***.net为***.net
sed -i "s/www.***.net/***.net/g" `grep www.***.net -rl /home`
exp:sed -i "s/shabi/$/g" `grep shabi -rl ./`
2、自己额外附加
2.1 将文件1.txt内的文字“garden”替换成“mirGarden”
# sed -i "s/garden/mirGarden/g" 1.txt //sed -i 很简单
2.2 将当前目录下的所有文件内的“garden”替换成“mirGarden”
## sed -i "s/garden/mirGarden/g" `ls` //其实也就是ls出多个文件名而已
macOS 的 sed 命令是 BSD 版本的,和 GNU 版本的 sed 有区别。用 brew 安装 gnu-sed:
brew install gnu-sed
安装好的命令是 gsed 。
匹配```和```之间的多行内容,并在它们的行首添加 4 个空格:
gsed -i '/```/{:ans/^/ /g/```/!ba}' filename
配合 find 命令,批量处理所有文件:
find . -name "*.md" -exec gsed -i '/```/{:ans/^/ /g/```/!ba}' {} \
“多行处理”参考自 https://www.cnblogs.com/yangxiaochu/p/7602884.html
添加一个文件的内容,也不进行改变,建议直接cat两个文件,重定向到一个新文件,再对新文件进行处理
cat text1 text2 >tmp.txt如果非要这个新文件的名称还是text2,可以mv
如果只是在文件开头加一行内容,可以用:
sed '1i 要添加的一行文本' 要处理的文件名
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)