----------------------------------------------------------------------------------------------------------------------------

**********************

2017-1-13:初版

**********************

小记:用MAC工作已经三周,本以为已经完全了解MAC与Windows的各种不同,没想到这两天被Shell给摆了一道,mac下的shell和linux下竟然有些许的不同,由此耽误了我3个小时的宝贵时间,特此吐槽,做个整理。

------------------------------------------------------------------------------------------------------------------------------

对于shell小白的我,先看这里比较详细的sed简明教程,针对linux的用法。

SED 简明教程

MAC和Linux的区别,参考网址:

http://blog.csdn.net/cbbbc/article/details/50474947

错误解决

sed command hits “undefined label” error on Mac OS X

http://www.mkyong.com/mac/sed-command-hits-undefined-label-error-on-mac-os-x/

接下来言归正传,步入正题:

原数据


可以用vi或者vim创建一个test.txt的文本,

dongzhengdeMacBook-Pro:temp dongzheng$ vim test.txt

文本内容如下:

dongzhengdeMacBook-Pro:temp dongzheng$ cat test.txt
aaaa
bbbb
cccc
dddd

占位符

在匹配行的前一行或者后一行添加内容


写法:

#匹配行前加
sed -i '/dzblog/inickname' file
#匹配行前后
sed -i '/dzblog/athis is my blog address' file

书写时为了方便区分,往往会在i或者a的后面加一个反斜杠。代码就变成:

#匹配行前加
sed -i '/dzblog/i\nickname' file
#匹配行前后
sed -i '/dzblog/a\this is my blog address' file

想记住也很简单,a就记忆成after就可以了。

例子:

在第二行即"bbbb"行的下面添加一行,内容为"delon"

Linux命令:

sed '/bbbb/a\delon' test.txt 

如果此命令在MAC下输入,会报错:

sed: 1: "/bbbb/a\delon": extra characters after \ at the end of a command

占位符

MAC命令:

➜  Home sed '/aaaa/a\
delon
' test.txt

结果:

aaaa
bbbb
delon
cccc
dddd

在某行的前面添加,只需要把'a'换成'i'即可。

此命令不会在原文件上进行更改,只是会把结果输出到termimal里,如果需要直接更改文件,需要参数 -i

直接替换文件里的指定文本


主要介绍-i和替换文本的方式

Linux命令

#直接将file文件里的printa替换为printb
sed -i 's/printa/printb/' test.txt

MAC上的命令当然略有不同,报错为:

sed: 1: "test.txt": undefined label 'est.txt'

MAC命令:

#mac的使用方式sed -ixxx 's/被替换文本/替换文本/' test.txt
sed -i.bak 's/printa/printb/' test.txt

-i后面跟字母数字均可,比如说我写的-i.bak,这样的话,会在file的同级目录下,出现一个test.txt.bak的文件,这个文件备份的是文件修改前的内容。

我想mac的设计初衷或许是为了防止sed改错的悲剧,所以必须强制备份。

复制过来,未验证

Linux shell脚本 删除文件中的一行内容

比如:在1.txt里有以下内容:

HELLO=1

NI=2

WORLD=3

I Love China.

Love all....

如果是要删除第三行:

sed -i '3d' 1.txt

如果删除以Love开头的行

sed -i '/^Love/d' 1.txt

删除包含Love的行

sed -i '/Love/d' 1.txt

参考

http://www.360doc.com/content/14/1125/19/7044580_428024359.shtml

SHELL 在指定行的前/后插入指定内容

linux下在某行的前一行或后一行添加内容

Mac上的sed

有空就学习如下几个命令:

https://zhidao.baidu.com/question/508817260.html?qbl=relate_question_0&word=shell%20%C8%A1%CE%C4%BC%FE%CC%D8%B6%A8%D0%D0%20%CC%ED%BC%D3

[Shell]sed命令在MAC和Linux下的不同使用方式的更多相关文章

  1. 几款抓包工具在windows,mac,linux下的支持分析

    抓包工具的使用 几款抓包工具在windows,mac,linux下的支持分析 抓包工具简介 Chrome/Firefox 开发者工具: 浏览器内置,方便易用 Fiddler/Charles: 基于代理 ...

  2. Mac、Linux下两个Emacs共享一个配置文件

    Mac.Linux下两个Emacs共享一个配置文件 有些嵌入式的实验需要在Linux进行,就安装了RHEL6.4的虚拟机,下载并编译了Emacs. 在Linux的.emacs文件中加入以下语句,即可引 ...

  3. Linux shell sed命令使用

    Linux处理文本文件的工具:     grep        过滤文件内容     sed            编辑文件内容     awk             正则表达式Regex      ...

  4. Linux shell sed命令在文件行首行尾添加字符

    昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed命令上,今天不总结一下都对不起昨天流逝的时间啊~~~ 用sed命令在行首或行尾添加字符的命令有以下几种: 假设处理的文本为test.f ...

  5. Linux shell sed 命令详解

    详细的sed命令详解,请参考https://my.oschina.net/u/3908182/blog/1921761 sed命令常见用途 查找关键词做全局替换 查找某行的关键词做替换 查找关键字所在 ...

  6. mac和linux下使用Docker,部署SpringBoot项目到docker

    主要是看一下如何在linux及mac上安装docker,创建docker镜像,部署SpringBoot项目到docker,并借助于DaoCloud进行docker镜像下载加速等. 我用的电脑是mac, ...

  7. linux命令(47):Linux下对文件进行按行排序,去除重复行

    Linux下对文件进行按行排序:sort 与 uniq 命令简介 Linux | May 24, 2015 | linux sort 命令可针对文本文件的内容,以行为单位进行排序.其基本语法格式为: ...

  8. linux下文件夹归置方式

    /bin:二进制可执行命令./dev:设备特殊文件./etc:系统管理和配置文件./etc/rc.d:启动的配 置文件和脚本./home:用户主目录的基点,比如用户user的主目录就是/home/us ...

  9. Linux下软件常见安装方式

    pasting  分类: Linux2007-12-08 16:31 1909人阅读 评论(0) 收藏 举报 linuxredhat脚本文档managerfile        Linux下软件安装主 ...

随机推荐

  1. flume1.4.0源码结构剖析

    flume基本思想: source负责收集数据,channel负责缓存数据,sink负责消费channel中的数据,具体使用方式这里不赘述 生命周期管理: 生命周期相关代码在flume-ng-core ...

  2. Python小技巧:运行目录或ZIP文件

    在写Python程序时,将不同功能代码写在不同文件中是一个好习惯,但是对于某些情况.如需要将脚本提供给别人运行使用,如若将程序写在几个文件中,则需要将文件都发给他人.别人就需要管理不同文件,这样对于别 ...

  3. VS2015环境下生成和调用DLL动态链接库

    一.生成动态链接库: 1.打开VS2015->文件->新建->项目->Visual C++->Win32->Win32控制台应用程序->将名称改为dll_ge ...

  4. SSH通过密钥登陆

    A服务器上操作 ssh-keygen -t rsa/dsa 后面所带参数rsa/dsa为加密方式,默认为dsa [root@localhost ~]# ssh-keygen Generating pu ...

  5. sudo -iu [用户] 命令无法正常切换到用户目录的原因

    今天干活时遇到一个问题,在sudo -iu [用户]命令执行后无法切换到用户对应的[ 用户@机器 ~$ ]命令行 .bashrc已正常配置为 if [ -f /etc/bashrc ]; then . ...

  6. 0x66 Tarjan算法与无向图连通性(1)

    ……是什么? 给定无向连通图G=(V,E)(不一定连通); 割点:若对于x∈V,从图中删去节点x以及所有与x关联的边后,G分裂成两个或两个以上不相连的子图,则称x为G的割点. 桥(割边):若对于e∈E ...

  7. Python request库与爬虫框架

    Requests库的7个主要方法  requests.request():构造一个请求,支持以下各方法的基础方法  requests.get():获取HTML网页的主要方法,对应于HTTP的GET  ...

  8. python 队列结合线程的使用

    from queue import Queue from threading import Thread import time q = Queue() def add_to_queue(): for ...

  9. MFC编程汇总

    1.visual2017专业版MFC编程环境搭建及第一个MFC程序的创建 2.通过MFC设计一个简单的计价程序 3.控件——静态空间.编辑框控件.命令按钮.复选框和单选控件 4.控件添加——静态控件. ...

  10. Js实现继承的方法

    原型的作用:1.将公共部分放入原型中,这样构造出的多个实例对象的公共部分只会占用一个公共空间,实现数据共享和节省内存空间 2.通过原型实现继承:构造函数模拟 "类"这个面向对象的概 ...