linux 替换多行内容,整理sed实战修改多行配置技巧
my goat's name is adam ---
顺手介绍一下正则表达式的一些最基本的东西:
^ 表示一行的开头。如:/^#/ 以#开头的匹配。
$ 表示一行的结尾。如:/}$/ 以}结尾的匹配。
\< 表示词首。 如 \\> 表示词尾。 如 abc\> 表示以 abc 結尾的詞。
. 表示任何单个字符。
* 表示某个字符出现了0次或多次。
[ ] 字符集合。 如:[abc]表示匹配a或b或c,还有[a-zA-Z]表示匹配所有的26个字符。如果其中有^表示反,如[^a]表示非a的字符
正规则表达式是一些很牛的事,比如我们要去掉某html中的tags:
html.txt
1
This is what I meant. Understand?
看看我们的sed命令
1
2
3
4
5
6
7
8
# 如果你这样搞的话,就会有问题
$sed's///g'html.txt
Understand?
# 要解决上面的那个问题,就得像下面这样。
# 其中的'[^>]' 指定了除了>的字符重复0次或多次。
$sed 's/]*>//g' html.txt
This is what I meant. Understand?
我们再来看看指定需要替换的内容:
1
2
3
4
5
6
7
8
9
$sed "3s/my/your/g" pets.txt
This is mycat
mycat's name is betty
This is your 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
1.4 下面的命令只替换第3到第6行的文本。
1
2
3
4
5
6
7
8
9
$sed "3,6s/my/your/g" pets.txt
This is mycat
mycat's name is betty
This is your dog
your dog's name is frank
This is your fish
your fish's name is george
This is my goat
my goat's name is adam
$cat my.txt
This is mycat, mycat'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
1.5只替换每一行的第一个s:
1
2
3
4
5
$sed s/s/S/1' my.txt
ThiS is mycat, mycat'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
1.6只替换每一行的第二个s:
1
2
3
4
5
$sed 's/s/S/2' my.txt
This iS mycat, mycat'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
1.7只替换第一行的第3个以后的s:
1
2
3
4
5
$sed 's/s/S/3g' my.txt
This is mycat, mycat'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
1.8 多个匹配
如果我们需要一次替换多个模式,可参看下面的示例:(第一个模式把第一行到第三行的my替换成your,第二个则把第3行以后的This替换成了That)
1
2
3
4
5
$sed '1,3s/my/your/g; 3,$s/This/That/g' my.txt
This is yourcat, yourcat's name is betty
This is your dog, your dog's name is frank
That is your fish, your fish's name is george
That is my goat, my goat's name is adam
上面的命令等价于:(注:下面使用的是sed的-e命令行参数)
1
sed -e '1,3s/my/your/g'-e'3,$s/This/That/g' my.txt
我们可以使用&来当做被匹配的变量,然后可以在基本左右加点东西。如下所示:
1
2
3
4
5
$sed 's/my/[&]/g' my.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
1.9圆括号匹配
使用圆括号匹配的示例:(圆括号括起来的正则表达式所匹配的字符串会可以当成变量来使用,sed中使用的是\1,\2…)
1
2
3
4
5
$sed 's/This is my \([^,]*\),.*is \(.*\)/\1:\2/g' my.txt
cat:betty
dog:frank
fish:george
goat:adam
上面这个例子中的正则表达式有点复杂,解开如下(去掉转义字符):
正则为:This is my ([^,]*),.*is (.*)
匹配为:This is my (cat),……….is (betty)
然后:\1就是cat,\2就是betty
a命令和i命令
a命令就是append, i命令就是insert,它们是用来添加行的。如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 其中的1i表明,其要在第1行前插入一行(insert)
$sed "1 i This is my monkey, my monkey's name is wukong" my.txt
This is my monkey, my monkey's name is wukong
This is mycat, mycat'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
# 其中的1a表明,其要在最后一行后追加一行(append)
$sed "$ a This is my monkey, my monkey's name is wukong" my.txt
This is mycat, mycat's name is betty
This is my monkey, my monkey's name is wukong
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
我们可以运用匹配来添加文本:
1
2
3
4
5
6
7
# 注意其中的/fish/a,这意思是匹配到/fish/后就追加一行
$sed "/fish/a This is my monkey, my monkey's name is wukong" my.txt
This is mycat, mycat'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 monkey, my monkey's name is wukong
This is my goat, my goat's name is adam
下面这个例子是对每一行都挺插入:
1
2
3
4
5
6
7
8
9
$sed "/my/a ----" my.txt
This is mycat, mycat'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
----
c命令
c 命令是替换匹配行
1
2
3
4
5
6
7
8
9
10
11
$sed "2 c This is my monkey, my monkey's name is wukong" my.txt
This is mycat, mycat's name is betty
This is my monkey, my monkey's name is wukong
This is my fish, my fish's name is george
This is my goat, my goat's name is adam
$sed "/fish/c This is my monkey, my monkey's name is wukong" my.txt
This is mycat, mycat's name is betty
This is my dog, my dog's name is frank
This is my monkey, my monkey's name is wukong
This is my goat, my goat's name is adam
d命令
删除匹配行
1
2
3
4
5
6
7
8
9
10
11
12
$sed '/fish/d' my.txt
This is mycat, mycat's name is betty
This is my dog, my dog's name is frank
This is my goat, my goat's name is adam
$sed '2d' my.txt
This is mycat, mycat's name is betty
This is my fish, my fish's name is george
This is my goat, my goat's name is adam
$sed '2,$d' my.txt
This is mycat, mycat's name is betty
p命令
打印命令
你可以把这个命令当成grep式的命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 匹配fish并输出,可以看到fish的那一行被打了两遍,
# 这是因为sed处理时会把处理的信息输出
$sed '/fish/p' my.txt
This is mycat, mycat'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 fish, my fish's name is george
This is my goat, my goat's name is adam
# 使用n参数就好了
$sed -n '/fish/p' my.txt
This is my fish, my fish's name is george
# 从一个模式到另一个模式
$sed -n '/dog/,/fish/p' my.txt
This is my dog, my dog's name is frank
This is my fish, my fish's name is george
#从第一行打印到匹配fish成功的那一行
$sed -n '1,/fish/p' my.txt
This is mycat, mycat's name is betty
This is my dog, my dog's name is frank
This is my fish, my fish's name is george
命令打包
第二个是cmd可以是多个,它们可以用分号分开,可以用大括号括起来作为嵌套命令。下面是几个例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$cat pets.txt
This is mycat
mycat'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
# 对3行到第6行,执行命令/This/d
$sed '3,6 {/This/d}' pets.txt
This is mycat
mycat's name is betty
my dog's name is frank
my fish's name is george
This is my goat
my goat's name is adam
# 对3行到第6行,匹配/This/成功后,再匹配/fish/,成功后执行d命令
$sed '3,6 {/This/{/fish/d}}' pets.txt
This is mycat
mycat's name is betty
This is my dog
my dog's name is frank
my fish's name is george
This is my goat
my goat's name is adam
# 从第一行到最后一行,如果匹配到This,则删除之;如果前面有空格,则去除空格
$sed '1,${/This/d;s/^ *//g}' pets.txt
my cat's name is betty
my dog's name is frank
my fish's name is george
my goat's name is adam
linux 替换多行内容,整理sed实战修改多行配置技巧相关推荐
- linux替换倒数第二个字符,sed – 替换文件倒数第二行的“模式”
我必须在文件的倒数第二行 – file.txt中用"string"替换"pattern". 以下三个sed命令能够打印倒数第二行.但我需要用"字符串& ...
- php读取大文件某行内容,PHP读取和修改大文件的某行内容_PHP教程
最近碰到一个比较有趣的问题,就是修改某个文件的某一行字符,不过文件太大,file()直接读取是不可能的,我使用fgets来跳转到指定行,并用fwrite修改某个字符串: $fp = fopen(d:/ ...
- c语言从文件删除指定行,C++操作文件行(读取,删除,修改指定行)
/******************************************************** Copyright (C), 2016-2018, FileName:main Au ...
- linux替换大文件内容,Linux批量替换文件内容
今天测试人员一不小心把导航的地址改错了,大约6000多个导航文件,要通过后台配置的话也很麻烦,可以通过linux命令实现对批量文件进行内容替换,但是技术经理不在,我对linux命令不熟,没办法只好硬着 ...
- linux 替换文件中的字符串——sed
sed -i 's/str1/str2/g' filename str1: 被替换的字符串 str2: 替换成的字符串
- linux替换文件中内容
sed -i 's/str1/str2/g' filename str1: 被替换的字符串 str2: 替换成的字符串
- Linux常用查看文件内容命令
Linux下查看文件内容的命令 cat 由第一行开始显示内容,并将所有内容输出 tac 从最后一行倒序显示内容,并将所有内容输出 more 根据窗口大小,一页一页的显示文件内容 less 和more类 ...
- VBA Excel 单元格内多行内容的文字处理方法
VBA Excel 实现单元格内多行内容的文字处理方法 在Excel中有很多的函数可以作用于单元格,但是其对单元格整体进行操作,因此单元格数据最好只有一行,这样Excel函数才能运行正确.但是有时候一 ...
- linux替换某一行中字符串,linux 给文件替换字符串/替换内容/替换某行 (shell,sed)...
本文是要讲linux 不打开文档/文件的情况下,替换文本内容. 打开文档,在文档/文件内替换内容的,可以用vim,可参考这篇文章vim 替换文本 . 话题相关 #linux 文件替换字符串 #sed ...
最新文章
- python中怎么做分组问题_详解Python中的分组函数groupby和itertools)
- MySQL This function has none of DETERMINISTIC, NO SQL...错误1418 的原因分析及解决方法
- 刷抖音对手机有什么要求_6频段全面5G手机 nova6 5G成新年换机最佳之选
- JSON 数据格式(基础知识)
- 数据科学入门的5个技巧
- 微型计算机远程编程微软,用微软的云计算来远程管理自己的电脑
- MySQL基础day05_MySQL数据库的备份与恢复-1-MySQL 5.6
- 还在搞三层架构?DDD 分层架构了解下!
- linux ssh-keygen命令生成密钥 -t -C参数说明
- 土木工程与计算机专业考研学校排名,2017年土木工程专业考研大学排名
- 关于天猫魔盒tmb100系列 开机灯亮显示器无反应的问题分析
- 高斯过程回归python_高斯过程回归在pythony中的实现(n个样本,n个目标)
- 清华紫光输入法linux,清华紫光拼音输入法
- mandriva urpm类命令
- python b站弹幕分析_Python获取B站视频弹幕 简单处理
- 慢就是快的人生哲理_慢一点人生哲理
- Python——requests模块详解
- 清华大学计算机科学与技术系朱军教授:机器学习里的贝叶斯基本理论、模型和算法...
- ASP.NET Core 项目文件夹解读新框架
- Smart3D初学者第二步:三维模型重建(1)
热门文章
- 高等数学学习笔记——第三十讲——柯西中值定理与洛必达法则
- sparksql2.0整理-自用
- [转]rpcndr.h和wtypes.h冲突Bug的解决方案
- Sinvoice:创新声波通信技术,给您带来全新的连接体验!
- MATLAB学习笔记(一):绘制二维箭头图
- 高考志愿填报网站服务器,高考后填报志愿必须遵守的原则
- linux故障报错及解决方法
- 《第一行代码》中遇到的问题
- 在命令行cmd中运行带相对路径的py脚本时, 找不到路径的解决方案
- 回顾陆奇的传奇人生,下一站是“星辰和大海”