Sed基本操作
来源:互联网 发布:尤克里里谱制作软件 编辑:程序博客网 时间:2024/06/06 19:01
什么是Sed?
Sed是一款流编辑工具,用来对文本进行过滤与替换。Sed通过一次仅读取一行内容来对某些指令进行处理后输出,所以Sed更适合处理大数据文件。
Sed通过文件或管道读取文件内容,但Sed默认并不修改源文件,而是将读入的内容复制到缓冲区中,即模式空间,所有的指令操作都是在模式空间中进行,然后Sed根据相应指令对模式空间中的内容进行处理并输出结果,默认输出至屏幕上。
Sed有哪些常用操作?
- a——追加在指定行之后
- i——插入在指定行
- d——删除指定行
- s——替换指定行
s命令替换
我们使用下面的这段文本做演示:
$ cat pets.txtThis is my cat my cat's name is bettyThis is my dog my dog's name is frankThis is my fish my fish's name is georgeThis is my goat my goat's name is adam
把其中的my字符串替换成Hao Chen’s,下面的语句应该很好理解(s表示替换命令,/my/表示匹配my,/Hao Chen’s/表示把匹配替换成Hao Chen’s,/g 表示一行上的替换所有的匹配):
$ sed "s/my/Hao Chen's/g" pets.txtThis is Hao Chen's cat Hao Chen's cat's name is bettyThis is Hao Chen's dog Hao Chen's dog's name is frankThis is Hao Chen's fish Hao Chen's fish's name is georgeThis is Hao Chen's goat Hao Chen's goat's name is adam
注意:
如果你要使用单引号,那么你没办法通过\’这样来转义,就有双引号就可以了,在双引号内可以用\”来转义。
再注意:
上面的sed并没有对文件的内容改变,只是把处理过后的内容输出,如果你要写回文件,你可以使用重定向,如:
$ sed "s/my/Hao Chen's/g" pets.txt > hao_pets.txt
或使用 -i 参数直接修改文件内容:
$ sed -i "s/my/Hao Chen's/g" pets.txt
在每一行最前面加点东西:
$ sed 's/^/#/g' pets.txt#This is my cat# my cat's name is betty#This is my dog# my dog's name is frank#This is my fish# my fish's name is george#This is my goat# my goat's name is adam
在每一行最后面加点东西:
$ sed 's/$/ --- /g' pets.txtThis is my cat --- my cat's name is betty ---This is my dog --- my dog's name is frank ---This is my fish --- my fish's name is george ---This is my goat --- my goat's name is adam ---
将第三行中的my替换为Your:
$ sed "3s/my/your/g" pets.txtThis is my cat my cat's name is bettyThis is your dog my dog's name is frankThis is my fish my fish's name is georgeThis is my goat my goat's name is adam
只替换第3到第6行的文本:
$ sed "3,6s/my/your/g" pets.txtThis is my cat my cat's name is bettyThis is your dog your dog's name is frankThis is your fish your fish's name is georgeThis is my goat my goat's name is adam
换下文本继续:
$ cat my.txtThis is my cat, my cat's name is bettyThis is my dog, my dog's name is frankThis is my fish, my fish's name is georgeThis is my goat, my goat's name is adam
只替换每一行的第一个s:
$ sed 's/s/S/1' my.txtThiS is my cat, my cat's name is bettyThiS is my dog, my dog's name is frankThiS is my fish, my fish's name is georgeThiS is my goat, my goat's name is adam
只替换每一行的第二个s:
$ sed 's/s/S/2' my.txtThis iS my cat, my cat's name is bettyThis iS my dog, my dog's name is frankThis iS my fish, my fish's name is georgeThis iS my goat, my goat's name is adam
替换每一行的第3个及以后的s:
$ sed 's/s/S/3g' my.txtThis is my cat, my cat'S name iS bettyThis is my dog, my dog'S name iS frankThis is my fiSh, my fiSh'S name iS georgeThis is my goat, my goat'S name iS adam
a命令和i命令
a命令就是append,i命令就是insert,它们是用来添加行的。如:
# 其中的1i表明,其要在第1行前插入一行(insert)$ sed "1 i This is my monkey, my monkey's name is wukong" my.txtThis is my monkey, my monkey's name is wukongThis is my cat, my cat's name is bettyThis is my dog, my dog's name is frankThis is my fish, my fish's name is georgeThis is my goat, my goat's name is adam# 其中的1a表明,其要在最后一行后追加一行(append)$ sed "$ a This is my monkey, my monkey's name is wukong" my.txtThis is my cat, my cat's name is bettyThis is my monkey, my monkey's name is wukongThis is my dog, my dog's name is frankThis is my fish, my fish's name is georgeThis is my goat, my goat's name is adam
我们可以运用匹配来添加文本:
# 注意其中的/fish/a,这意思是匹配到/fish/后就追加一行$ sed "/fish/a This is my monkey, my monkey's name is wukong" my.txtThis is my cat, my cat's name is bettyThis is my dog, my dog's name is frankThis is my fish, my fish's name is georgeThis is my monkey, my monkey's name is wukongThis is my goat, my goat's name is adam
d命令
删除匹配行
$ sed '/fish/d' my.txtThis is my cat, my cat's name is bettyThis is my dog, my dog's name is frankThis is my goat, my goat's name is adam$ sed '2d' my.txtThis is my cat, my cat's name is bettyThis is my fish, my fish's name is georgeThis is my goat, my goat's name is adam$ sed '2,$d' my.txtThis is my cat, my cat's name is betty
N命令(把下一行的内容纳入当成缓冲区做匹配)
下面的的示例会把原文本中的偶数行纳入奇数行匹配,而s只匹配并替换一次,所以,就成了下面的结果:
$ sed 'N;s/my/your/' pets.txtThis is your cat my cat's name is bettyThis is your dog my dog's name is frankThis is your fish my fish's name is georgeThis is your goat my goat's name is adam
也就是说,原来的文件成了:
This is my cat\n my cat's name is bettyThis is my dog\n my dog's name is frankThis is my fish\n my fish's name is georgeThis is my goat\n my goat's name is adam
这样一来,下面的例子你就明白了
$ sed 'N;s/\n/,/' pets.txtThis is my cat, my cat's name is bettyThis is my dog, my dog's name is frankThis is my fish, my fish's name is georgeThis is my goat, my goat's name is adam
c命令
c 命令是替换匹配行
$ sed "2 c This is my monkey, my monkey's name is wukong" my.txtThis is my cat, my cat's name is bettyThis is my monkey, my monkey's name is wukongThis is my fish, my fish's name is georgeThis is my goat, my goat's name is adam$ sed "/fish/c This is my monkey, my monkey's name is wukong" my.txtThis is my cat, my cat's name is bettyThis is my dog, my dog's name is frankThis is my monkey, my monkey's name is wukongThis is my goat, my goat's name is adam
p命令
打印命令,可以把这个命令当成grep式的命令
# 匹配fish并输出,可以看到fish的那一行被打了两遍,# 这是因为sed处理时会把处理的信息输出$ sed '/fish/p' my.txtThis is my cat, my cat's name is bettyThis is my dog, my dog's name is frankThis is my fish, my fish's name is georgeThis is my fish, my fish's name is georgeThis is my goat, my goat's name is adam# 使用n参数就好了$ sed -n '/fish/p' my.txtThis is my fish, my fish's name is george# 从一个模式到另一个模式$ sed -n '/dog/,/fish/p' my.txtThis is my dog, my dog's name is frankThis is my fish, my fish's name is george#从第一行打印到匹配fish成功的那一行$ sed -n '1,/fish/p' my.txtThis is my cat, my cat's name is bettyThis is my dog, my dog's name is frankThis is my fish, my fish's name is george
参考链接=https://coolshell.cn/articles/9104.html
- sed的基本操作
- Sed基本操作
- sed 命令基本操作举例
- linux基本操作---grep、sed、awk
- <linux-sed> sed基本用法
- sed&awk基本使用方法
- sed&awk基本使用方法
- sed 基本简介
- sed&awk基本使用方法
- sed基本用法
- Sed的基本用法
- sed命令基本用法
- sed awk 基本用法
- sed基本用法
- sed命令基本用法
- sed命令基本用法
- sed命令基本用法
- sed基本用法
- C++ Primer
- best-time-to-buy-and-sell-stock
- JQuery动态显示和隐藏div
- ngrok工具,将本地web服务暴露给互联网
- Machine Learning 2014 by Andrew NG (part 2)
- Sed基本操作
- 基于ubuntu16.04的ceph v10.2.9源码编译
- Kotlin学习资源
- oracle数据会滚
- Cordova下android与javascript的交互
- qq登录
- docker 安装 elasticsearch、kibana、logstash 5.6.1,带x-pack,从kafka中获取数据
- iOS 解决10网络权限问题
- HDOJ2019