当前位置: 首页 > 编程笔记 >

完美解决mac环境使用sed修改文件出错的问题

连时铭
2023-03-14
本文向大家介绍完美解决mac环境使用sed修改文件出错的问题,包括了完美解决mac环境使用sed修改文件出错的问题的使用技巧和注意事项,需要的朋友参考一下

sed是linux命令,用于处理文件内容(修改,替换等),mac中都可以使用,但发现相同的替换命令在linux可以正常执行,在mac则执行失败。

出错原因

用shell写了个更新Config/Config.php版本的脚本,代码如下:

#!/bin/bash

file='Config/Config.php'
old_version='1.1.0'
new_version='1.1.1'

#替换配置文件版本
sed -i "s/$old_version/$new_version/g" "$file"

exit 0

在linux执行正常,但在mac环境下执行出现以下错误:

$ cat ./Config/Config.php
// 版本
define('VERSION', 1.1.0);

$ ./update_config.sh 
sed: 1: "Config/Config.php": invalid command code C

man sed 查看原因,找到 -i 参数的说明

-i extension 
Edit files in-place, saving backups with the specified extension. If a zero-length extension is given, no backup will be saved. It is not recommended to 
give a zero-length extension when in-place editing files, as you risk corruption or partial content in situations where disk space is exhausted, etc.

原来sed -i需要带一个字符串作为备份源文件的文件名称,如果这个字符串长度为0,则不备份。

例如执行

sed -i "_bak" "s/a/b/g" "example.txt"

则会创建一个example.txt_bak的备份文件,文件内容为修改前的example.txt内容

实例

1、如果需要备份源文件,update_config.sh修改为

#!/bin/bash

file='Config/Config.php'
old_version='1.1.0'
new_version='1.1.1'

#替换配置文件版本
sed -i "_bak" "s/$old_version/$new_version/g" "$file"

exit 0

执行结果

$ cat ./Config/Config.php
// 版本
define('VERSION', 1.1.0);

$ ./update_config.sh 

$ cat ./Config/Config.php
// 版本
define('VERSION', 1.1.1);

$ cat ./Config/Config.php_bak
// 版本
define('VERSION', 1.1.0);

执行前会备份源文件到Config.php_bak

2、如果不需要备份,把update_config.sh修改为

#!/bin/bash

file='Config/Config.php'
old_version='1.1.0'
new_version='1.1.1'

#替换配置文件版本
sed -i "" "s/$old_version/$new_version/g" "$file"

exit 0
执行结果

$ cat ./Config/Config.php
// 版本
define('VERSION', 1.1.0);

$ ./update_config.sh

$ cat ./Config/Config.php
// 版本
define('VERSION', 1.1.1);

以上这篇完美解决mac环境使用sed修改文件出错的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍完美解决axios跨域请求出错的问题,包括了完美解决axios跨域请求出错的问题的使用技巧和注意事项,需要的朋友参考一下 错误信息: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the req

  • 本文向大家介绍完美解决java.lang.OutOfMemoryError处理错误的问题,包括了完美解决java.lang.OutOfMemoryError处理错误的问题的使用技巧和注意事项,需要的朋友参考一下 原因: 常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据; 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收; 3.代码中存在死循环或循环产生过

  • 本文向大家介绍ECSHOP完美解决Deprecated: preg_replace()报错的问题,包括了ECSHOP完美解决Deprecated: preg_replace()报错的问题的使用技巧和注意事项,需要的朋友参考一下 随着PHP5.5 的普及,ECSHOP系统又爆出了新的错误。PHP发展到PHP5.5版本以后,有了很多细微的变化。而ECSHOP官方更新又太慢,发现这些问题后也不及时升级,

  • 本文向大家介绍完美解决Java获取文件路径出现乱码的问题,包括了完美解决Java获取文件路径出现乱码的问题的使用技巧和注意事项,需要的朋友参考一下 在Java中有时获取文件路径,获取的路径中存在中文或者是空格的时候,路径出现乱码。这个问题困扰了我好久,用过各种的转码都无济于事。在后来终于解决了,在这里和大家分享一下,其实也就是加一行代码的问题。 我在项目的是使用 这样来获得当前类的文件路径的。但是

  • 本文向大家介绍Mac环境mysql5.7.21 utf8编码问题及解决方案,包括了Mac环境mysql5.7.21 utf8编码问题及解决方案的使用技巧和注意事项,需要的朋友参考一下 1. 目标:将 mysql 的 character_set_server 的值由 latin1 更改为 utf8 暂时性:SET character_set_server=utf8 即可,一次性。 永久性:需要更改配

  • 本文向大家介绍完美解决安装完tensorflow后pip无法使用的问题,包括了完美解决安装完tensorflow后pip无法使用的问题的使用技巧和注意事项,需要的朋友参考一下 Win8,ANACONDA3(64-bit),Python3.6.2。ANACONDA Prompt中不能用pip命令安装包,并且是在安装了TensorFlow后才发生的。 报错如下: 解决方案: 1.conda insta