sed

stream editor,流编辑器

查找替换

sed 's/pattern/replace_string/' file

替换每一行第一次出现的pattern,将替换后的文本输出到stdout,'/'是定界符,可以使用任意的定界符,如果在pattern或者replace_stirng中出现定界符的话,使用''进行转义

sed 's/http:\/\//https:\/\/' url.txt

把每一行第一次出现的http替换为https

sed 's/pattern/replace_string/g' file

替换所有的pattern,将替换后的文本输出到stdout,g表示替换每一行中的出现的所有pattern

sed 's/pattern/replace_string/2g' file

替换第三次开始出现的的pattern,将替换后的文本输出到stdout,ng表示替换每一行中从第(n+1)次出现的pattern

sed -n 's/pattern/str/g'

输出所有替换后的行

cat file | sed -n '/pattern/p'

输出搜索到的行,-n表示只输出匹配到的行(默认输出所有行)

sed -i 's/pattern/str/g' file

直接将替换后的内容写入到源文件中

sed -e 's/pattern1l/str1/g' -e 's/pattern2/str2/g' file

进行多处编辑

移除空白行

sed '/^$/d'

^$: 匹配空白行

d: 删除匹配到的行

已匹配字符串标记&

echo this is an example | sed 's/\w\+/[&]/g'

输出:[this] [is] [an] [example]

\w: 正则表达式元字符,表示匹配单个单词(数字、字母,下划线)

+: 正则表达式,匹配一次或者多次,"+"对"+" 进行转义

&: 表示前面pattern匹配到的字符串

echo BIG small | sed 's/\([A-Z]\+\) \([a-z]\+\)/\2 \1/'

输出:small BIG

\1: 表示pattern中第一个 (pattern) 匹配到的子串,\2表示第二个,以此类推

组合多个表达式

sed 'exp1' | sed 'exp2'

等价于

sed 'exp1'; 'exp2'

等价于

sed 'exp1 exp2'

等价于

sed -e exp1 -e exp2

双引号,引用

sed一般使用单引号包围表达式,如果要使用shell变量,则使用双引号,因为在shell中shell不会对单引号内的内容进行解析,对双引号中的部分符号会进行解析,比如"$"

test=hello; echo hello WORLD | sed "s/$test/HELLO/"

输出:HELLO WORLD

模式空间

pattern space: 模式空间,处理文件一行的临时缓冲区,处理完一行之后把模式空间的内容打印到stdout,然后自动会清空缓存

hold space: 保持空间,不糊自动清空的缓冲区,使用gGhHd等命令操作

d: 删除pattern space的内容,开始下一个循环

h、H: 复制/追加pattern space到hold space

g、G: 复制/追加hold space 到pattern space

x: 交换pattern space 和 hold space`的内容

$ cat num.txt
one
two
three $ sed '1!G;h;$!d' num.txt
three
two
one

对每一行执行命令 '1!G;h;$!d'

第一行:

1!G: 不执行G,

h: 复制pattern space内容——one到hold space

$!d: 删除pattern space

执行完之后:

pattern space: 空

hold space:

one

第二行:

1!G: 追加hold space 内容到pattern space

h: 复制pattern space内容到hold space

$!d: 删除pattern space

执行完之后:

pattern space: 空

hold space:

two

one

第三行:

1!G: 追加hold space到pattern space

h: 复制pattern space到hold space

$!d: 不删除pattern space

执行完之后:

pattern space:

three

two

one

hold space:

three

two

one

转换大小写

这个功能是gnu sed的extension

\L: 转换replacement为小写,直到遇到\E、\U

\l: 转换下一个char为小写

\U: 转换replacement为大写,直到遇到\L、\E

\u: 转换下一个char为大写

\E: 转换大小写的终止符,终止以\L、\U开始的转换

echo 'a-b-' | sed 's/\(b\?\)-/x\u\1/g'

输出:axxB

echo 'a-b-' | sed 's/\(b\?\)-/\u\1x/g'

输出:aXBx

s命令的一般形式

s/regex/replacement/flag

可用的flag

g: 将替换应用到所有地方,而不是搜索到的第一个地方

number: 替换第number个地方

i、I: 不区分大小写

linux 命令 — sed的更多相关文章

  1. Linux命令sed

    如果一个文本文件数据比较多,大概有40万条数据,我想取出第500-1000条数据,保存到另一个文件,用linux命令该如何操作? sed -n '500,1000p' 41w.txt > new ...

  2. linux 命令--sed

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

  3. Linux命令 sed

    一. 以行为单位进行操作. d:删除 $ nl passwd | sed '2,5d'  # 删除第2~5行 $ nl passwd | sed '2d'  # 删除第2行 $ nl passwd | ...

  4.  linux命令sed与awk是干什么用的,怎么用?

    非常强大的文本操纵工具,sed,awk,grep 这个三个命令 都是操作文本文件的unix系统有几个非常命令的特点:1. 对于内核而言,unix文件都是字节序列.io设备也是文件.2. 至于文件的含义 ...

  5. linux命令sed学习笔记

    sed其实就是两个主要的知识点,那就是“怎么选择”和“怎么操作”!

  6. linux命令-sed,uniq,cut,wc

    sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ...

  7. (转载)linux命令-sed

    原文地址:https://www.cnblogs.com/zhangzongjian/p/10708222.html

  8. <转>如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等

    原文链接:http://www.vaikan.com/use-multiple-cpu-cores-with-your-linux-commands/ 你是否曾经有过要计算一个非常大的数据(几百GB) ...

  9. 《sed的流艺术之四》-linux命令五分钟系列之二十四

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

随机推荐

  1. KVM 虚拟机的热迁移

    热迁移:顾名思义在虚拟机不关机的情况下将KVM虚拟机进行迁移 准备工作:两台KVM虚拟机,一台nfs虚拟机,centos7.4系统 主机 IP地址 主机名 KVM01 10.00.11 kvm01 K ...

  2. 计算机爱好者协会技术贴markdown第三期

    之前都是给大家展示的对文本的基本操作,这一期我们要给大家展示的就是很高大上的东西了哦 看左边是不是超low,右边是不是瞬间高大上了!!! 一个简单的表格是这么创建的: 爱酱     | Value - ...

  3. EFLinq查询

    1.无参数查询var model = db.Database.SqlQuery<UserInfo>("select* from UserInfoes ").ToList ...

  4. Jsp处理过程and数据交互

    request处理客户端请求 客户端-------------->jsp页面--------------->服务器 常用方法 1.String getParameter(String na ...

  5. redis_字典_哈希hash

    字典.哈希表基本数据结构 redis字典使用哈希表作为底层实现,基本结构就是数组+散列 typedef struct dictht { // 哈希表数组 dictEntry **table; // 哈 ...

  6. Docker pull下来的镜像(2)

    1.通过docker pull ubuntu:12.04 命令拉取镜像,ll发现当前目录并没有什么变化. 2.切换到docker目录 [root@iZwz9fedjw2xvy6fvxfnxgZ zxy ...

  7. 使用Eclipse的代码追踪功能

    在使用Java编写复杂一些的程序时,你会不会常常对一层层的继承关系和一次次方法的调用感到迷惘呢?幸亏我们有了Eclipse这么好的IDE可以帮我们理清头绪--这就要使用Eclipse强大的代码追踪功能 ...

  8. SqlServer 连接 相关。

    sqlserver数据库连接池是一个客户端的东西.和sql server服务器无关. 各种provider默认的连接池大小不同. 比如:Ado.NET 中sqlserver 连接池默认的值是100. ...

  9. Django积木块七——视频

    视频 # 在网上搜索video.js然后下载相关的js和css文件,看文档正确使用视频模块,添加视频外链 <div style="width: 1200px;height: 675px ...

  10. mysql兼容emoji表情存取

    emoji介绍 Emoji (絵文字,词义来自日语えもじ,e-moji,moji在日语中的含义是字符)是一套起源于日本的12x12像素表情符号,由栗田穣崇(Shigetaka Kurit)创作,最早在 ...