ubuntu 利用 grep 匹配和 sed 修改实现字符串批量修改

ubuntu 利用 grep 匹配和 sed 修改实现字符串批量修改

解决conda复制后用户名不一致问题(经试验无法修正错误,不建议批量修改解决问题,应该采用正确的方式迁移环境)

  • 问题来源:从一台设备上复制conda环境(直接把整个文件夹复制过去)到另外一台设备后,由于前后两台设备的用户名一致,导致很多地方都会出现错误
  • 解决方案:把新设备中anaconda3文件中的所有涉及旧用户名 oldname 的地方全修改为新用户名 newname
  • 解决方法::利用 grep 搜索关键字 oldname,返回其文件路径并作为参数送给 sed 进行字符串匹配修改

这条语句表面在 * 路径下,递归-r查找oldname,-l返回其文件路径,利用管道|送给sed作为参数进行修改
grep -r oldname * -l|xargs sed -i "s/oldname/newname/g"

建议先mkdir一个新文件夹,创建几个.txt文件练个手再修改,记得数据备份
利用 grep -nr string * 可以查看grep匹配string的位置

在实际修改时,不能修改所有 oldname,会出错,应该只把注释掉的修改掉

例如 #!/home/hbchen/anaconda3/envs/fastreid/bin/python3.6修改,注意#号,/等都需要转义才能匹配。因此为
grep -r "\#\!\/home\/hbchen\/anaconda3\/envs\/fastreid\/bin\/python3.6" * -l|xargs sed -i "s/\#\!\/home\/hbchen\/anaconda3\/envs\/fastreid\/bin\/python3.6/\#\!\/home\/chb\/anaconda3\/envs\/fastreid\/bin\/python3.6/g"
其中 hbchen 和 chb 是我两台设备的用户名

  • 参考grep用法
  • grep/sed匹配修改
  • grep/find 混合使用,转义字符

你可能感兴趣的:(TOOLS)