linux 命令 — sed
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的更多相关文章
- Linux命令sed
如果一个文本文件数据比较多,大概有40万条数据,我想取出第500-1000条数据,保存到另一个文件,用linux命令该如何操作? sed -n '500,1000p' 41w.txt > new ...
- linux 命令--sed
简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处 ...
- Linux命令 sed
一. 以行为单位进行操作. d:删除 $ nl passwd | sed '2,5d' # 删除第2~5行 $ nl passwd | sed '2d' # 删除第2行 $ nl passwd | ...
- linux命令sed与awk是干什么用的,怎么用?
非常强大的文本操纵工具,sed,awk,grep 这个三个命令 都是操作文本文件的unix系统有几个非常命令的特点:1. 对于内核而言,unix文件都是字节序列.io设备也是文件.2. 至于文件的含义 ...
- linux命令sed学习笔记
sed其实就是两个主要的知识点,那就是“怎么选择”和“怎么操作”!
- linux命令-sed,uniq,cut,wc
sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ...
- (转载)linux命令-sed
原文地址:https://www.cnblogs.com/zhangzongjian/p/10708222.html
- <转>如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等
原文链接:http://www.vaikan.com/use-multiple-cpu-cores-with-your-linux-commands/ 你是否曾经有过要计算一个非常大的数据(几百GB) ...
- 《sed的流艺术之四》-linux命令五分钟系列之二十四
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
随机推荐
- Python Day 13 装饰器
阅读目录 内容回顾 函数嵌套的定义 global.nonlocal关键字 闭包及闭包的运用场景 开放封闭原则 装饰器 一个函数被多次装饰 ##内容回顾 1.函数对象:函数名 => 存放的是函 ...
- 【翻译】Flume 1.8.0 User Guide(用户指南) Channel
翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...
- Linux下好用的屏幕录像软件kazam及截图软件shutter
都是apt直接安装即可使用. 其中kazam默认保存的文件格式是avi,非常大,通常录制几十秒就已经好几个G,导致录制过程太占用资源,会出现卡顿的现象. 在“首选项”中可以选择输出格式为mp4,文件就 ...
- 浮点数运算结果不精确,以及用String来构造BigDecimal进行浮点数精确计算
1.浮点数运算结果不精确 先看如下代码 System.out.println(1.0 - 0.8); System.out.println(0.2 + 0.1); System.out.println ...
- redis在linux云服务器上完整的搭建步骤
Redis的安装 搭建环境: 华为云linux服务器 Linux系统CneterOS-7.3 SSH客户端 Xshell6 安装c语言编译环境软件如下: 安装报错 然后找到了解决方法: 安装kerne ...
- JavaScript自定义鼠标右键菜单
下面为JavaScript代码 window.onload = function () { //好友列表 var f = 0; //判断指定id的元素在页面中是否存在 if (document.get ...
- macOS终端开启TAB键自动补全功能(不区分大小写)
1.在当前用户根目录(~)下,修改~/.inputrc这个文件(如果文件不存在,则新建该文件),文件内容如下: set show-all-if-ambiguous on set completion- ...
- [转]kaldi 神经网络
转自:http://blog.csdn.net/xmdxcsj/article/details/54695506 overview type author CPU/GPU feature nnet1 ...
- python多线程在渗透测试中的应用
难易程度:★★★ 阅读点:python;web安全; 文章作者:xiaoye 文章来源:i春秋 关键字:网络渗透技术 前言 python是门简单易学的语言,强大的第三方库让我们在编程中事半功倍,今天, ...
- Android 9.0/P 开发问题及解决方案汇总
一.使用 org.apache.http.legacy 库在Android 9.0上运行出现崩溃 日志内容: java.lang.NoClassDefFoundError: Failed resolu ...