先举个栗子:

你想要在某个文件下下面对某写文件的 链接 或者 密码进行批量的替换,并且不想产生新的备份文件。进过一顿学习,你可能会找到类似这样的命令:

sed -i 's/old_link/new_link/g' *

赶紧跑去一试,在GNU下是可以的,不过在os x下你应该会得到如下的返回结果:

command a expects \ followed by text

哎哟喂,别人都可以,为啥我的不信,特么的,到底发生了什么:

其实这个事情是这样的,如果你想使用 -i 选项,你需要提供一个备份文件的扩展名,比如你当前目录有两个文件,这两个文件都需要完成替换,两个文件分别是:

abc.txt
xyz.txt

那么你的命令就应该是:

sed -i '.original' 's/old_link/new_link/g' *

然后你得到了4个文件:

abc.txt
abc.txt.original
xyz.txt
xyz.txt.original

然后你再把 .original 的两个文件删除就行了,可以使用:

rm -rf *.original

为啥会这样呢?

那是因为没有办法找到一个有效的命令满足所有的情形:

sed -i -e ... - does not work on OS X as it creates -e backups
sed -i'' -e ... - does not work on OS X 10.6 but works on 10.9+
sed -i '' -e ... - not working on GNU

所以,这个只是一种折衷的解决方案,over

os x下使用sed进行字符串替换的更多相关文章

  1. Linux sed 命令字符串替换使用方法详解

    1. sed替换的基本语法 sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义.2. 单引号” ‘ ’”是没有办法用反斜线” ...

  2. Linux sed -i 字符串替换

    sed -i 直接替换文件中的内容不输出, 如 将 laravel .env中的 QUEUE_DRIVER=sync 替换为 QUEUE_DRIVER=redis, 在Laravel的项目根目录中运行 ...

  3. 企业案例:查找当前目录下所有文件,并把文件中的https://www.cnblogs.com/zhaokang2019/字符串替换成https://www.cnblogs.com/guobaoyan2019/

    企业案例:查找当前目录下所有文件,并把文件中的https://www.cnblogs.com/zhaokang2019/字符串替换成https://www.cnblogs.com/guobaoyan2 ...

  4. python 替换指定目录下,所有文本字符串

    网页保存后,会把js文件起名为.下载,html里面的引用也会有,很不美观,解决方案:用python替换字符串 import os import re """将当前目录下所 ...

  5. Linux查找和替换目录下所有文件中字符串(转载)

    转自:http://rubyer.me/blog/1613/ 单个文件中查找替换很简单,就不说了.文件夹下所有文件中字符串的查找替换就要记忆了,最近部署几十台linux服务器,记录下总结. 查找文件夹 ...

  6. Python 实现类似sed命令的字符串替换小程序

    环境 PyCharm, Windows 背景 sed命令 sed 's/原字符串/新字符串' 单引号中间是s表示替换,原字符串就是要被替换掉的字符串,新字符串就是想要的字符串. 效果 在命令行输入py ...

  7. sed 字符串替换

    1. sed替换的基本语法为: sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义. 2. 单引号” ‘ ’”是没有办法用反 ...

  8. Net Core 下 Newtonsoft.Json 转换字符串 null 替换成string.Empty

    原文:Net Core 下 Newtonsoft.Json 转换字符串 null 替换成string.Empty public class NullToEmptyStringResolver : De ...

  9. Linux下的sed流编辑器命令详解

    sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内 ...

随机推荐

  1. flush table with read lock的轻量级解决方案

    为什么要使用FTWRL   MySQL dba在日常工作中,数据备份绝对是工作频度最高的工作内容之一.当你使用逻辑方式进行备份(mydumper,mysqldump)或物理方式进行备份(percona ...

  2. C# 之多线程(二)

    一.确定多线程的结束时间,thread的IsAlive属性 在多个线程运行的背景下,了解线程什么时候结束,什么时候停止是很有必要的. 案例:老和尚念经计时,2本经书,2个和尚念,一人一本,不能撕破,最 ...

  3. Best MVC Practices 最佳的MVC实践

    Although Model-View-Controller (MVC) is known by nearly every Web developer, how to properly use MVC ...

  4. [编程] C语言结构体指针作为函数参数

    结构体指针作为函数参数:结构体变量名代表的是整个集合本身,作为函数参数时传递的整个集合,也就是所有成员,而不是像数组一样被编译器转换成一个指针.如果结构体成员较多,尤其是成员为数组时,传送的时间和空间 ...

  5. 一、hive安装(内置数据库derby)

    hive是一个数据仓库工具,建立在hadoop之上,它的存在是为了让大数据的查询和分析更加的方便.hive提供简单的sql查询功能,并最终转换为mapreduce任务执行. 一.环境 JDK1.8+官 ...

  6. java一些对象概念扫盲帖(DO VO DTO PO)

    资料来源:http://virusswb.blog.51cto.com/115214/458636 BO:Business Object,业务对象.主要是承载业务数据的实体.处理业务逻辑的时候使用,数 ...

  7. js中数组, JSON的与字符串的处理

    1. JSON转字符串 var jsonStr = {"name": "xiaoming", "sex": "男"} J ...

  8. JSP9大内置对象

    JSP9大内置对象 JSP9个内置对象:out对象 用于输出各种数据reuest对象 封装了来自客户端的各种信息response对象 封装了服务器的响应信息exception对象 封装了程序运行过程中 ...

  9. jenkins 参数化构建过程

    构建项目时我们可能需要切换到另一个分支编译,或者说每次编译版本都要加1,这时候我们可以改配置或者改脚本文件,这显然不是一个好的方式,那么如何能在编译前让用户输入参数呢?jenkins早就为我们考虑好 ...

  10. 零基础学python习题 - 进入python的世界

    1. python拥有以下特性:面向对象的特性.动态性.内置的数据结构.简单性.健壮性.跨平台性.可扩展性.强类型语言.应用广泛 2. python 需要  编译 3. 以下不属于python内置数据 ...