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实战修改多行配置技巧相关推荐

  1. linux替换倒数第二个字符,sed – 替换文件倒数第二行的“模式”

    我必须在文件的倒数第二行 – file.txt中用"string"替换"pattern". 以下三个sed命令能够打印倒数第二行.但我需要用"字符串& ...

  2. php读取大文件某行内容,PHP读取和修改大文件的某行内容_PHP教程

    最近碰到一个比较有趣的问题,就是修改某个文件的某一行字符,不过文件太大,file()直接读取是不可能的,我使用fgets来跳转到指定行,并用fwrite修改某个字符串: $fp = fopen(d:/ ...

  3. c语言从文件删除指定行,C++操作文件行(读取,删除,修改指定行)

    /******************************************************** Copyright (C), 2016-2018, FileName:main Au ...

  4. linux替换大文件内容,Linux批量替换文件内容

    今天测试人员一不小心把导航的地址改错了,大约6000多个导航文件,要通过后台配置的话也很麻烦,可以通过linux命令实现对批量文件进行内容替换,但是技术经理不在,我对linux命令不熟,没办法只好硬着 ...

  5. linux 替换文件中的字符串——sed

    sed -i 's/str1/str2/g' filename str1: 被替换的字符串 str2: 替换成的字符串

  6. linux替换文件中内容

    sed -i 's/str1/str2/g' filename str1: 被替换的字符串 str2: 替换成的字符串

  7. Linux常用查看文件内容命令

    Linux下查看文件内容的命令 cat 由第一行开始显示内容,并将所有内容输出 tac 从最后一行倒序显示内容,并将所有内容输出 more 根据窗口大小,一页一页的显示文件内容 less 和more类 ...

  8. VBA Excel 单元格内多行内容的文字处理方法

    VBA Excel 实现单元格内多行内容的文字处理方法 在Excel中有很多的函数可以作用于单元格,但是其对单元格整体进行操作,因此单元格数据最好只有一行,这样Excel函数才能运行正确.但是有时候一 ...

  9. linux替换某一行中字符串,linux 给文件替换字符串/替换内容/替换某行 (shell,sed)...

    本文是要讲linux 不打开文档/文件的情况下,替换文本内容. 打开文档,在文档/文件内替换内容的,可以用vim,可参考这篇文章vim 替换文本 . 话题相关 #linux 文件替换字符串 #sed ...

最新文章

  1. python中怎么做分组问题_详解Python中的分组函数groupby和itertools)
  2. MySQL This function has none of DETERMINISTIC, NO SQL...错误1418 的原因分析及解决方法
  3. 刷抖音对手机有什么要求_6频段全面5G手机 nova6 5G成新年换机最佳之选
  4. JSON 数据格式(基础知识)
  5. 数据科学入门的5个技巧
  6. 微型计算机远程编程微软,用微软的云计算来远程管理自己的电脑
  7. MySQL基础day05_MySQL数据库的备份与恢复-1-MySQL 5.6
  8. 还在搞三层架构?DDD 分层架构了解下!
  9. linux ssh-keygen命令生成密钥 -t -C参数说明
  10. 土木工程与计算机专业考研学校排名,2017年土木工程专业考研大学排名
  11. 关于天猫魔盒tmb100系列 开机灯亮显示器无反应的问题分析
  12. 高斯过程回归python_高斯过程回归在pythony中的实现(n个样本,n个目标)
  13. 清华紫光输入法linux,清华紫光拼音输入法
  14. mandriva urpm类命令
  15. python b站弹幕分析_Python获取B站视频弹幕 简单处理
  16. 慢就是快的人生哲理_慢一点人生哲理
  17. Python——requests模块详解
  18. 清华大学计算机科学与技术系朱军教授:机器学习里的贝叶斯基本理论、模型和算法...
  19. ASP.NET Core 项目文件夹解读新框架
  20. Smart3D初学者第二步:三维模型重建(1)

热门文章

  1. 高等数学学习笔记——第三十讲——柯西中值定理与洛必达法则
  2. sparksql2.0整理-自用
  3. [转]rpcndr.h和wtypes.h冲突Bug的解决方案
  4. Sinvoice:创新声波通信技术,给您带来全新的连接体验!
  5. MATLAB学习笔记(一):绘制二维箭头图
  6. 高考志愿填报网站服务器,高考后填报志愿必须遵守的原则
  7. linux故障报错及解决方法
  8. 《第一行代码》中遇到的问题
  9. 在命令行cmd中运行带相对路径的py脚本时, 找不到路径的解决方案
  10. 回顾陆奇的传奇人生,下一站是“星辰和大海”