【sed】基本用法
1. 文本处理
sed编辑器根据sed命令处理数据流中的数据;在流编辑器将所有命令与一行数据匹配完后,它会读取下一行数据并重复以下过程:
(1) 一次从输入中读取一行数据
(2) 根据所提供的编辑器命令匹配数据
(3) 按照命令修改流中的数据
(4) 将新的数据输出到STDOUT
格式:
sed options script-command input-file
选项:
|
-e script |
在script中指定命令 |
|
-f file |
从file文件中读取命令 |
|
-n |
不产生命令输出,使用print命令完成输出 |
|
-i |
将修改应用到文件 |
|
= |
打印行号,行号由换行符决定 |
|
l |
打印数据流中的文本和不可打印的ASCII字符 |
命令:
|
s |
替换行 |
sed '[address]/s/pattern/replacement/flags' |
|
d |
删除行 |
sed '[address]command' |
|
i/a |
插入/追加行 |
sed '[address]command\new line' |
|
c |
修改行 |
sed '[address]command\new line' |
|
y |
转换单字符 |
sed '[address]y/inchars/outchars/' |
|
w |
写入行 |
sed '[address]w test.file' date.txt |
|
r |
读取行 |
sed '[address]r test.file' date.txt |
定义编辑器命令:
# echo "this is a test" | sed 's/test/big test/'
this is a big test
使用多个编辑器命令:
# echo "this is a test" | sed 's/test/big test/;s/this/here/'
here is a big test
从文件中读取编辑器命令:
#sed -f script1.sed data1.txt
Tips:sed编辑器不会修改文本文件的数据,只会将修改后的数据发送到STDOUT;若想修改,可使用-i选项
2. sed编辑器基础
【行寻址】
将命令作用于特定行和某些行
格式1:
[address] command
格式2:
address {
command1
command2
command3
}
数字方式的行寻址:
最后一行的行号可使用$代替
# sed '2s/dog/cat/' data.txt
# sed '2,3s/dog/cat/' data.txt
# sed '2,$s/dog/cat/' data.txt
文本模式过滤器:
/pattern/command
# sed -n '/kim/s/bash/cash/p' /etc/passwd
kim:x:1001:1001::/home/kim:/bin/cash
Tips:使用正则表达式,可创建高级文本模式匹配表达式来匹配各种数据
命令组合:
可用花括号{}将多条命令组合在一起,行寻址方式如格式2
# sed '/two/{s/quick/slow/;s/dog/cat/}' data.txt
【替换】
格式:
sed '[address]/s/pattern/replacement/flags'
替换选项:
s命令(substitude)可在行中替换文本,默认仅替换第一处
替换标记:
s/pattern/replacement/flags
(1) 数字,表明替换第几处
(2) g,替换所有
(3) p,原先行的内容要打印出来(先打印修改的行,结合-n选项可实现只输出修改的行)
(4) w file,替换结果写入文件
# cat data.txt
This is a test line.
This is a different line.
# sed 's/test/trail/w file.txt' data.txt
This is a trail line.
This is a different line.
# cat file.txt
This is a trail line.
替换字符:
sed允许选择其它字符来作为替换命令中的字符串分隔符
# sed -n 's!/bin/bash!/bin/csh!p' /etc/passwd
root:x:0:0:root:/root:/bin/csh
fonsview:x:1000:1000::/home/fonsview:/bin/csh
Tips: 替换命令结合正则表达式中的回溯引用,可实现删除一行中的特定部分
# echo "math: a+b=c" | sed -e '/math/s/\(.*=\).*/\1ab/'
math: a+b=ab
【删除行】
格式:
sed '[address]command'
删除文本流中的特定行,可以用删除命令d
# sed '/two/,/three/d' data.txt
The quick brown fox jumps over the lazy dog one
The quick brown fox jumps over the lazy dog four
【插入和追加行】
格式:
sed '[address]command\new line'
(1) 插入insert会在指定行前增加新行,命令i
(2) 追加append会在指定行后增加新行,命令a
# sed '1i\hello,\world!' data.txt
# sed '/two/i\hello,world!' data.txt
【修改行】
修改(change)命令允许修改数据流中整行文本的内容
格式:
sed '[address]command\new line'
# sed '1c\dog' data.txt
# sed '/two/c\dog\cat' data.txt
【转换】
格式:
sed '[address]y/inchars/outchars/'
转换(transform)命令(y)是唯一可以处理单个字符的sed命令,对inchars和outchars进行一对一映射
# sed 'y/1234/abcd/' data.txt
The quick brown fox jumps over the lazy dog a one
The quick brown fox jumps over the lazy dog b two
The quick brown fox jumps over the lazy dog c three
The quick brown fox jumps over the lazy dog d four
【写入文本】
格式:
sed '[address]w test.file' date.txt
# sed -n '/one/,/three/w text.txt' data.txt
# cat text.txt
The quick brown fox jumps over the lazy dog 1 one
The quick brown fox jumps over the lazy dog 2 two
The quick brown fox jumps over the lazy dog 3 three
【读取数据】
读取(read)命令允许你将一个独立文件中的数据插入到数据流中,指定的地址行之后
格式:
sed '[address]r test.file' date.txt
# sed '2r text.txt' data.txt
The quick brown fox jumps over the lazy dog 1 one
The quick brown fox jumps over the lazy dog 2 two
hello,world!
The quick brown fox jumps over the lazy dog 3 three
The quick brown fox jumps over the lazy dog 4 four
【sed】基本用法的更多相关文章
- linux中sed的用法【转】
sed命令行格式为: sed [-nefri] ‘command’ 输入文本/文件 常用选项: -n∶取消默认的输出,使用安静(silent)模式.在一般 sed 的 ...
- sed命令用法详解
sed命令用法 sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space) ...
- Linux中sed的用法实践
Linux中sed的用法实践 参考资料:https://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html http://www.fn139 ...
- SED命令用法整理
sed '/Started/'q 匹配到Started字符串则退出sed命令 sed '/Started/{/in/q}' 同时匹配到Started和in两个字符时则退出sed命令 ------- ...
- [转载]linux中sed的用法
转自:http://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html sed命令行格式为: sed [-nefri] ‘ ...
- Linux中Sed的用法
Linux中Sed的用法 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为: ...
- sed高级用法:模式空间(pattern space)和保持空间(hold space)
摘自:https://blog.csdn.net/ITsenlin/article/details/21129405 sed高级用法:模式空间(pattern space)和保持空间(hold spa ...
- 正则表达式,sed简单用法
一. 正则表达式 1. 常见的正则表达式字符 [] 匹配字符集 grep "bl[lo]g" oldboy.txt 表示字符‘l’或者‘o’都可匹配 * 重复前面字符任意次 g ...
- Linux sed命令用法
概述 sed命令是一个面向字符流的非交互式编辑器,不允许用户与它进行交互操作.sed是以行为单位处理文本内容的.在shell中,可以批量修改文本内容. 用法 sed [选项] [动作] 选项与参数:- ...
- linux之sed的用法
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为: sed ...
随机推荐
- C# 批量设置窗体中控件状态的方法
在开发中常遇到当点击某个按钮的时候,禁用文本框或按钮的的状态,以防止误操作,下面的代码是我已批量设置指定控件中的按钮状态的代码,同理可以延伸出很多操作. /// <summary> /// ...
- SvcUtil.exe工具生成客户端代理类
1.以管理员身份运行vs下命令工具: 2.运行代码示例:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin>svcutil http: ...
- win10下 安装迅雷精简版
下载链接:https://files-cdn.cnblogs.com/files/del88/ThunderMini_1.5.3.288.zip 他妈的 今天安装迅雷精简版 在win10上 竟然报错, ...
- python现状
自从官方宣布 2020 年 1 月后不再更新维护 Python2,已经有一大批开源软件将其抛弃.今天,抛弃 Python2 的名单上又多了一个重磅软件.Python2 是 Python 官方在 200 ...
- java Spring boot项目简单说明
前言 一直从事.NET开发,但一直有种想去探索Java世界的冲动,今天终于有时间来尝试一下,以下是自己探索过程的简要记录. 一.开发工具 开发工具选用 IntelliJ IDEA社区版(免费),安装教 ...
- linux 下安装python2.7.13
1.下载所必要的依赖包 yum -y install python-devel openssl openssl-devel gcc sqlite sqlite-devel mysql-devel li ...
- python生成式:列表、字典、集合
python的3类生成式: 列表生成式 字典生成式 集合生成式 1.python列表生成式 my_data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(&quo ...
- 我理解的epoll(一)——实现分析
epoll项目中用了几次,但是对于其原理只是一知半解.我希望通过几篇blog能加深对她的理解. 我认为epoll是同步IO,因为他在调用epoll_wait时,内核在有I/O就绪前是阻塞的,虽然可以将 ...
- 这些JVM命令配置参数你知道吗?
JVM是多数开发人员视为理所当然的Java功能和性能背后的重负荷机器.然而,我们很少有人能理解JVM是如何进行工作的—像任务分配和垃圾收集.转动线程.打开和关闭文件.中断和/或JIT编译Java字节码 ...
- 如何给mysql数据库添加一个用户
首先以root身份登录到MySQL服务器中. $ mysql -u root -p 当验证提示出现的时候,输入MySQL的root帐号的密码. 创建一个MySQL用户 使用如下命令创建一个用户名和密码 ...