SlideShare ist ein Scribd-Unternehmen logo
1 von 19
sed
Agenda
概述
• sed被称为流编辑器(stream editor), 它提供了一
  种非交互式的方式(仅使用命令行)对输入的文
  本内容进行编辑, 并将编辑后的文本输出到标
  准输出. sed的输入可以来自: 文本文件, 管道或
  者标准输入;
• sed不会修改输入文件的内容, 除非将输出结果
  重定向到该文件; sed是基于正则表达式执行各
  种文本操作命令的;
• 使用sed --version命令查看当前使用sed工具的
  版本.
工作过程
• sed是逐行对输入进行处理的, 以sed处理文本文件为
  例, 以下是一个处理周期:
  1, 读取文件的一行, 并保存在一个称为模式空间的内
  存缓冲区中;
  2, 如果指定了行范围, 则判断该行是否在该范围中.
  如果在则执行sed命令, 不在则不执行sed命令;
  3, 如果未指定行范围, 执行sed命令;
  4, 如果未指定-n选项且模式空间没有清空, 打印模式
  空间中的文本(可能经过处理也可能未处理).
  注: 可以使用d指令清空模式空间.
  sed在处理完所有的输入行之后, 退出程序. 可以看到
  在整个处理过程中sed不会对文本文件进行写操
  作, 而只是输出到标准输出.
工作过程
                  - 示例
• 这里以一个示例文件和相关的命令演示sed的工作过程. textfile文件的
   内容是以下三行:
   abc
   ddd
   abc
   命令: sed -n '1,2s/a/b/p' textfile
   命令说明:
       -n       默认不打印模式空间
       1,2      行范围, 处理1-2行
       s/a/b/p sed命令, 替换模式a为b, 然后打印
• 执行过程:
1, 读取第一行abc, 该行在范围1,2中, 执行命令s/a/b/p, 将替换后的字符串
   bbc打印出来; 指定了-n选项不再打印;
2, 清空模式空间, 读取第二行ddd, 该行在范围1,2中, 执行命令, 没有发生
   替换操作, 不打印; 指定-n选项, 不再打印;
3, 清空模式空间, 读取第三行abc, 不在范围1,2中, 不执行sed命令; 指定了
   -n选项不打印.
   命令最终的输出结果是: bbc
基本用法
• 举几个简单的例子, 以便对sed这个工具有一些
  初步的了解:
  sed -n ‘/RE/p’ file    # 打印匹配RE的行; sed在
  处理完一行之后默认会打印该行, -n选项表示
  不打印; 跟在/后面的p是sed指令, 表示打印.
  sed -n ‘s/RE/string/p’ file # 对文件中包含RE的行
  进行替换, 替换后打印该行; 没有进行替换的行
  不打印.
sed命令
• sed支持对当前行的如下编辑命令(常用):
  a                在当前行后面添加一行或多行
  i                在当前行之前插入文本
  c                用新文本修改(替换)当前行
  d                 删除行
  p                 打印行
  n                 读取下一行, 并从下一条命令开始处理该行
  q                 退出sed
  r                 从文件中读取输入行
  !                 对当前行之外的所有行执行命令
  -----------------与暂存缓冲区相关-----------------
  h                 将模式空间内容复制到暂存缓冲区
  H                 将模式空间内容追加到暂存缓冲区
  g                 将暂存缓冲区内容复制到模式空间
  G                 将暂存缓冲区内容追加到模式空间
   x                交换暂存缓冲区与模式空间内容
  s                 执行替换操作
与替换命令配合使用:
  g                 行内进行全局替换
  p                 打印行, 与s配合使用时仅在发生替换时才打印
  w                 将行写入文件
sed命令
                      -!
• 可以在命令前面加上”!”表示不执行该命令,
  比如:
  !d        不删除模式空间
  !p        不打印
  示例:
  sed -n ‘/ab/!p’ textfile # 打印所有不匹配
                         模式的行
 sed ‘/ab/!d’ textfile   # 删除不匹配模式的行
sed选项
• sed命令可以指定如下选项:
  -e 允许多项编辑
  -f 指定sed脚本文件名称
  -n 取消默认的输出
  示例1:
  sed -e '1,2d' -e 's/ab/d/' textfile
  说明:
  这里使用了-e选项进行多项编辑, 对读取的每一行, 先执
  行命令‘1,2d’, 然后执行命令’s/ab/d/’.
  示例2:
  sed -n ‘/ab/p’ textfile
  说明: 打印包含模式ab的行, 其他行不打印
退出状态
• sed在执行完成时会设置一个退出状态, 如果
  程序执行成功状态为0, 否则为非0. 示例:



• 与grep不同的是sed只有在程序执行出现错
  误时才会将退出状态置为非0, 示例:
范围界定
• 范围界定是指界定需要进行编辑行的范
  围, 可以是数字/正则表达式, 或者两者的组
  合. 如果使用数字指定行号, 行号从1开始, $
  符号表示最后一行. 如果没有指定范围, 那
  么sed将会默认处理所有的行. 示例:
  sed ‘1,3d’ textfile # 删除1-3行
  sed -n ‘/west/,/north/p’ textfile # 打印从匹配
  west开始到匹配north的行
sed元字符
• sed的正则表达式元字符与vi的十分类似, 不
  同的地方是sed在进行替换时使用&字符代
  表查找到的结果以便在替换串中引用, 示例:
  sed -n 's/[a-z]+/&~/gp' textfile
  说明:
  在所有连续的小写字符串后面加上~符号.
• sed其他的元字符参考: 《3, Regular
 Expression.pptx》
正斜杠/
• 默认情况下sed使用正斜杠进行模式的匹配和
  替换, 如果需要在模式中使用/字符, 那么需要
  使用进行转义, 比如:
  sed -n ‘/ab//p’ textfile   # 打印匹配ab/模式的行
  另一个解决方法是使用另外的字符作为模式标
  识符, 使用char指定某个字符作为模式标识
  符, 比如:
  sed -n ‘#ab/#p’ textfile   # 使用#代替/
• sed替换命令默认以s命令后的第一个字符作为
  模式标识符, 此时不需要, 比如:
  sed -n ‘s#ab#88#p’ textfile # 使用#代替/
示例
• 以下是一些示例, 用于演示一些具体命令的使用:
  1, p
  p命令用于打印模式空间的内容, 通常与-n选项一起使用打印匹
  配特定模式的行. 示例:
  sed -n ‘/north/p’ textfile  # 打印匹配north模式的行
  2, d
  d命令用于删除当前模式空间的内容, 这些行的内容不会被打印.
  示例:
  sed ‘1,3d’ textfile    # 删除1-3行
  sed ‘3,$d’ textfile    # 删除3到最后一行
  3, s
  s命令用于替换操作, 示例:
  sed ‘s/ab/c/’ textfile      # 将第一个ab替换为c
  sed ‘s/ab/c/g’ textfile     # g表示将所有的ab替换为c
  s命令与p命令, -n选项配合使用, 仅打印发生替换后的行, 示例:
  sed -n ‘s/ab/c/gp’ textfile # 对包含ab模式的行进行替换并打印
示例
4, 行范围
sed -n ‘2,3p’ textfile            # 打印2-3行
sed -n ‘/west/,$p’ textfile # 打印匹配west行到最后一行
sed -n ‘5,/^north/p’ textfile # 打印第5行到匹配以north开
头的行
5, r
在处理完当前行之后(包括默认的打印), 打印文件内容.
示例:
sed ‘/ddd/r t2’ textfile # 打印匹配ddd的行之后, 输出t2
文件的内容
6, w
将当前文件的一些行写入到另一个文件, 示例:
sed -n ‘/ab/w newfile’ textfile # 将匹配ab的行写入newfile
中
示例
7, a
追加, 在处理完当前行之后追加内容到标准输出, 示
例:
sed ‘/ddd/a hello’ textfile  # 处理完包含ddd模式
的行之后, 输出 hello
8, i
插入, 在处理当前行之前打印内容到标准输出, 示例:
 sed ‘/ddd/i hello’ textfile # 处理包含ddd模式的
行之前, 输出 hello
9, c
用指定的文本替换模式空间的文本, 并打印输出, 之
后处理下一行. 示例:
 sed ‘/ddd/c hello’ textfile # 替换匹配模式的行
示例
10, n
读取下一行, 之后的命令都会作用在下一行上面. 示例:
 sed '/abc/{n;s/dd/gg/g}' textfile
说明:
如果读入的行不匹配模式abc, 不执行命令默认打印该行;
如果匹配, 打印该行之后读取下一行, 对下一行执行命令
s/dd/gg/g, 之后默认打印修改后的内容
11, y
转换命令, 比如y/abc/ABC/将abc分别转换为大写, 示例:
sed ‘1,3y/abc/ABC/’ textfile       # 将1-3行的abc分别转换
为ABC
12, q
处理完指定行之后, 退出sed. 示例:
 sed ‘/ddd/q’ textfile     # 处理完匹配ddd的行之后退出命令
暂存缓冲区
• 暂存缓冲区是模式空间之外的另一个缓冲区, sed提供了
  相关的命令用于将模式空间的内容存储到暂存缓冲区
  中:
  h           将模式空间内容复制到暂存缓冲区
  H           将模式空间内容追加到暂存缓冲区
  g           将暂存缓冲区内容复制到模式空间
  G           将暂存缓冲区内容追加到模式空间
  x           交换暂存缓冲区与模式空间内容
• 示例:
  sed -e '/abc/H' -e '$G' textfile
  读取一行, 如果匹配abc模式追加到暂存区, 如果当前是
  最后一行则将暂存区的内容追加到模式空间; 最后打印
  模式空间的内容.
   sed -e '/abc/H' -e '$x' textfile
  与上例不同的是, 如果是最后一行交换暂存区与模式空
END

Weitere ähnliche Inhalte

Was ist angesagt?

系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器鍾誠 陳鍾誠
 
Shell(bash) Scripting
Shell(bash) ScriptingShell(bash) Scripting
Shell(bash) ScriptingRobby Lee
 
Ruby 使用手冊 (Part 1)
Ruby 使用手冊 (Part 1)Ruby 使用手冊 (Part 1)
Ruby 使用手冊 (Part 1)Drake Huang
 
系統程式 -- 第 5 章 連結與載入
系統程式 -- 第 5 章 連結與載入系統程式 -- 第 5 章 連結與載入
系統程式 -- 第 5 章 連結與載入鍾誠 陳鍾誠
 
Bash入门基础篇
Bash入门基础篇Bash入门基础篇
Bash入门基础篇Zhiyao Pan
 
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VMCompiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VMLi Hsuan Hung
 
10 檔案說明與處理
10 檔案說明與處理10 檔案說明與處理
10 檔案說明與處理shademoon
 
Maintainable PHP Source Code
Maintainable PHP Source CodeMaintainable PHP Source Code
Maintainable PHP Source CodeBo-Yi Wu
 
SQL Loader & Bulk Insert 大量資料匯入工具
SQL Loader & Bulk Insert 大量資料匯入工具SQL Loader & Bulk Insert 大量資料匯入工具
SQL Loader & Bulk Insert 大量資料匯入工具HO-HSUN LIN
 
新觀念的VB6教本ch10
新觀念的VB6教本ch10新觀念的VB6教本ch10
新觀念的VB6教本ch10jameschsc
 
竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗乐群 陈
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析wavefly
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學Bo-Yi Wu
 

Was ist angesagt? (18)

系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器
 
Shell(bash) Scripting
Shell(bash) ScriptingShell(bash) Scripting
Shell(bash) Scripting
 
Ruby 使用手冊 (Part 1)
Ruby 使用手冊 (Part 1)Ruby 使用手冊 (Part 1)
Ruby 使用手冊 (Part 1)
 
系統程式 -- 第 5 章 連結與載入
系統程式 -- 第 5 章 連結與載入系統程式 -- 第 5 章 連結與載入
系統程式 -- 第 5 章 連結與載入
 
Bash入门基础篇
Bash入门基础篇Bash入门基础篇
Bash入门基础篇
 
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VMCompiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
 
10 檔案說明與處理
10 檔案說明與處理10 檔案說明與處理
10 檔案說明與處理
 
Maintainable PHP Source Code
Maintainable PHP Source CodeMaintainable PHP Source Code
Maintainable PHP Source Code
 
SQL Loader & Bulk Insert 大量資料匯入工具
SQL Loader & Bulk Insert 大量資料匯入工具SQL Loader & Bulk Insert 大量資料匯入工具
SQL Loader & Bulk Insert 大量資料匯入工具
 
新觀念的VB6教本ch10
新觀念的VB6教本ch10新觀念的VB6教本ch10
新觀念的VB6教本ch10
 
Wasm text
Wasm textWasm text
Wasm text
 
Work with Vim
Work with VimWork with Vim
Work with Vim
 
系統程式 -- 第 8 章
系統程式 -- 第 8 章系統程式 -- 第 8 章
系統程式 -- 第 8 章
 
PHP
PHPPHP
PHP
 
竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學
 
系統程式 -- 第 7 章
系統程式 -- 第 7 章系統程式 -- 第 7 章
系統程式 -- 第 7 章
 

Andere mochten auch

Numerical tour in the Python eco-system: Python, NumPy, scikit-learn
Numerical tour in the Python eco-system: Python, NumPy, scikit-learnNumerical tour in the Python eco-system: Python, NumPy, scikit-learn
Numerical tour in the Python eco-system: Python, NumPy, scikit-learnArnaud Joly
 
A useful tools in windows py2exe(optional)
A useful tools in windows py2exe(optional)A useful tools in windows py2exe(optional)
A useful tools in windows py2exe(optional)John(Qiang) Zhang
 
Python advanced 3.the python std lib by example – application building blocks
Python advanced 3.the python std lib by example – application building blocksPython advanced 3.the python std lib by example – application building blocks
Python advanced 3.the python std lib by example – application building blocksJohn(Qiang) Zhang
 

Andere mochten auch (6)

Numerical tour in the Python eco-system: Python, NumPy, scikit-learn
Numerical tour in the Python eco-system: Python, NumPy, scikit-learnNumerical tour in the Python eco-system: Python, NumPy, scikit-learn
Numerical tour in the Python eco-system: Python, NumPy, scikit-learn
 
A useful tools in windows py2exe(optional)
A useful tools in windows py2exe(optional)A useful tools in windows py2exe(optional)
A useful tools in windows py2exe(optional)
 
Brief Introduction to Cython
Brief Introduction to CythonBrief Introduction to Cython
Brief Introduction to Cython
 
Introduction to cython
Introduction to cythonIntroduction to cython
Introduction to cython
 
Profiling in python
Profiling in pythonProfiling in python
Profiling in python
 
Python advanced 3.the python std lib by example – application building blocks
Python advanced 3.the python std lib by example – application building blocksPython advanced 3.the python std lib by example – application building blocks
Python advanced 3.the python std lib by example – application building blocks
 

Mehr von ted-xu

11, OCP - awr & alert system
11, OCP - awr & alert system11, OCP - awr & alert system
11, OCP - awr & alert systemted-xu
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashbackted-xu
 
9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rmanted-xu
 
8, OCP - backup with rman
8, OCP - backup with rman8, OCP - backup with rman
8, OCP - backup with rmanted-xu
 
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recoveryted-xu
 
6, OCP - oracle security
6, OCP - oracle security6, OCP - oracle security
6, OCP - oracle securityted-xu
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storageted-xu
 
4, OCP - oracle networking
4, OCP - oracle networking4, OCP - oracle networking
4, OCP - oracle networkingted-xu
 
3, OCP - instance management
3, OCP - instance management3, OCP - instance management
3, OCP - instance managementted-xu
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a databaseted-xu
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture introted-xu
 
12, OCP - performance tuning
12, OCP - performance tuning12, OCP - performance tuning
12, OCP - performance tuningted-xu
 
7, business event system
7, business event system7, business event system
7, business event systemted-xu
 
6, workflow miscellaneous
6, workflow miscellaneous6, workflow miscellaneous
6, workflow miscellaneousted-xu
 
5, workflow function activity
5, workflow function activity5, workflow function activity
5, workflow function activityted-xu
 
4, workflow tables & api
4, workflow tables & api4, workflow tables & api
4, workflow tables & apited-xu
 
3, workflow in ebs
3, workflow in ebs3, workflow in ebs
3, workflow in ebsted-xu
 
2, a simple workflow
2, a simple workflow2, a simple workflow
2, a simple workflowted-xu
 
1, workflow intro
1, workflow intro1, workflow intro
1, workflow introted-xu
 
8, bes tables & api
8, bes tables & api8, bes tables & api
8, bes tables & apited-xu
 

Mehr von ted-xu (20)

11, OCP - awr & alert system
11, OCP - awr & alert system11, OCP - awr & alert system
11, OCP - awr & alert system
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashback
 
9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman
 
8, OCP - backup with rman
8, OCP - backup with rman8, OCP - backup with rman
8, OCP - backup with rman
 
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery
 
6, OCP - oracle security
6, OCP - oracle security6, OCP - oracle security
6, OCP - oracle security
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storage
 
4, OCP - oracle networking
4, OCP - oracle networking4, OCP - oracle networking
4, OCP - oracle networking
 
3, OCP - instance management
3, OCP - instance management3, OCP - instance management
3, OCP - instance management
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a database
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture intro
 
12, OCP - performance tuning
12, OCP - performance tuning12, OCP - performance tuning
12, OCP - performance tuning
 
7, business event system
7, business event system7, business event system
7, business event system
 
6, workflow miscellaneous
6, workflow miscellaneous6, workflow miscellaneous
6, workflow miscellaneous
 
5, workflow function activity
5, workflow function activity5, workflow function activity
5, workflow function activity
 
4, workflow tables & api
4, workflow tables & api4, workflow tables & api
4, workflow tables & api
 
3, workflow in ebs
3, workflow in ebs3, workflow in ebs
3, workflow in ebs
 
2, a simple workflow
2, a simple workflow2, a simple workflow
2, a simple workflow
 
1, workflow intro
1, workflow intro1, workflow intro
1, workflow intro
 
8, bes tables & api
8, bes tables & api8, bes tables & api
8, bes tables & api
 

5, sed

  • 1. sed
  • 3. 概述 • sed被称为流编辑器(stream editor), 它提供了一 种非交互式的方式(仅使用命令行)对输入的文 本内容进行编辑, 并将编辑后的文本输出到标 准输出. sed的输入可以来自: 文本文件, 管道或 者标准输入; • sed不会修改输入文件的内容, 除非将输出结果 重定向到该文件; sed是基于正则表达式执行各 种文本操作命令的; • 使用sed --version命令查看当前使用sed工具的 版本.
  • 4. 工作过程 • sed是逐行对输入进行处理的, 以sed处理文本文件为 例, 以下是一个处理周期: 1, 读取文件的一行, 并保存在一个称为模式空间的内 存缓冲区中; 2, 如果指定了行范围, 则判断该行是否在该范围中. 如果在则执行sed命令, 不在则不执行sed命令; 3, 如果未指定行范围, 执行sed命令; 4, 如果未指定-n选项且模式空间没有清空, 打印模式 空间中的文本(可能经过处理也可能未处理). 注: 可以使用d指令清空模式空间. sed在处理完所有的输入行之后, 退出程序. 可以看到 在整个处理过程中sed不会对文本文件进行写操 作, 而只是输出到标准输出.
  • 5. 工作过程 - 示例 • 这里以一个示例文件和相关的命令演示sed的工作过程. textfile文件的 内容是以下三行: abc ddd abc 命令: sed -n '1,2s/a/b/p' textfile 命令说明: -n 默认不打印模式空间 1,2 行范围, 处理1-2行 s/a/b/p sed命令, 替换模式a为b, 然后打印 • 执行过程: 1, 读取第一行abc, 该行在范围1,2中, 执行命令s/a/b/p, 将替换后的字符串 bbc打印出来; 指定了-n选项不再打印; 2, 清空模式空间, 读取第二行ddd, 该行在范围1,2中, 执行命令, 没有发生 替换操作, 不打印; 指定-n选项, 不再打印; 3, 清空模式空间, 读取第三行abc, 不在范围1,2中, 不执行sed命令; 指定了 -n选项不打印. 命令最终的输出结果是: bbc
  • 6. 基本用法 • 举几个简单的例子, 以便对sed这个工具有一些 初步的了解: sed -n ‘/RE/p’ file # 打印匹配RE的行; sed在 处理完一行之后默认会打印该行, -n选项表示 不打印; 跟在/后面的p是sed指令, 表示打印. sed -n ‘s/RE/string/p’ file # 对文件中包含RE的行 进行替换, 替换后打印该行; 没有进行替换的行 不打印.
  • 7. sed命令 • sed支持对当前行的如下编辑命令(常用): a 在当前行后面添加一行或多行 i 在当前行之前插入文本 c 用新文本修改(替换)当前行 d 删除行 p 打印行 n 读取下一行, 并从下一条命令开始处理该行 q 退出sed r 从文件中读取输入行 ! 对当前行之外的所有行执行命令 -----------------与暂存缓冲区相关----------------- h 将模式空间内容复制到暂存缓冲区 H 将模式空间内容追加到暂存缓冲区 g 将暂存缓冲区内容复制到模式空间 G 将暂存缓冲区内容追加到模式空间 x 交换暂存缓冲区与模式空间内容 s 执行替换操作 与替换命令配合使用: g 行内进行全局替换 p 打印行, 与s配合使用时仅在发生替换时才打印 w 将行写入文件
  • 8. sed命令 -! • 可以在命令前面加上”!”表示不执行该命令, 比如: !d 不删除模式空间 !p 不打印 示例: sed -n ‘/ab/!p’ textfile # 打印所有不匹配 模式的行 sed ‘/ab/!d’ textfile # 删除不匹配模式的行
  • 9. sed选项 • sed命令可以指定如下选项: -e 允许多项编辑 -f 指定sed脚本文件名称 -n 取消默认的输出 示例1: sed -e '1,2d' -e 's/ab/d/' textfile 说明: 这里使用了-e选项进行多项编辑, 对读取的每一行, 先执 行命令‘1,2d’, 然后执行命令’s/ab/d/’. 示例2: sed -n ‘/ab/p’ textfile 说明: 打印包含模式ab的行, 其他行不打印
  • 10. 退出状态 • sed在执行完成时会设置一个退出状态, 如果 程序执行成功状态为0, 否则为非0. 示例: • 与grep不同的是sed只有在程序执行出现错 误时才会将退出状态置为非0, 示例:
  • 11. 范围界定 • 范围界定是指界定需要进行编辑行的范 围, 可以是数字/正则表达式, 或者两者的组 合. 如果使用数字指定行号, 行号从1开始, $ 符号表示最后一行. 如果没有指定范围, 那 么sed将会默认处理所有的行. 示例: sed ‘1,3d’ textfile # 删除1-3行 sed -n ‘/west/,/north/p’ textfile # 打印从匹配 west开始到匹配north的行
  • 12. sed元字符 • sed的正则表达式元字符与vi的十分类似, 不 同的地方是sed在进行替换时使用&字符代 表查找到的结果以便在替换串中引用, 示例: sed -n 's/[a-z]+/&~/gp' textfile 说明: 在所有连续的小写字符串后面加上~符号. • sed其他的元字符参考: 《3, Regular Expression.pptx》
  • 13. 正斜杠/ • 默认情况下sed使用正斜杠进行模式的匹配和 替换, 如果需要在模式中使用/字符, 那么需要 使用进行转义, 比如: sed -n ‘/ab//p’ textfile # 打印匹配ab/模式的行 另一个解决方法是使用另外的字符作为模式标 识符, 使用char指定某个字符作为模式标识 符, 比如: sed -n ‘#ab/#p’ textfile # 使用#代替/ • sed替换命令默认以s命令后的第一个字符作为 模式标识符, 此时不需要, 比如: sed -n ‘s#ab#88#p’ textfile # 使用#代替/
  • 14. 示例 • 以下是一些示例, 用于演示一些具体命令的使用: 1, p p命令用于打印模式空间的内容, 通常与-n选项一起使用打印匹 配特定模式的行. 示例: sed -n ‘/north/p’ textfile # 打印匹配north模式的行 2, d d命令用于删除当前模式空间的内容, 这些行的内容不会被打印. 示例: sed ‘1,3d’ textfile # 删除1-3行 sed ‘3,$d’ textfile # 删除3到最后一行 3, s s命令用于替换操作, 示例: sed ‘s/ab/c/’ textfile # 将第一个ab替换为c sed ‘s/ab/c/g’ textfile # g表示将所有的ab替换为c s命令与p命令, -n选项配合使用, 仅打印发生替换后的行, 示例: sed -n ‘s/ab/c/gp’ textfile # 对包含ab模式的行进行替换并打印
  • 15. 示例 4, 行范围 sed -n ‘2,3p’ textfile # 打印2-3行 sed -n ‘/west/,$p’ textfile # 打印匹配west行到最后一行 sed -n ‘5,/^north/p’ textfile # 打印第5行到匹配以north开 头的行 5, r 在处理完当前行之后(包括默认的打印), 打印文件内容. 示例: sed ‘/ddd/r t2’ textfile # 打印匹配ddd的行之后, 输出t2 文件的内容 6, w 将当前文件的一些行写入到另一个文件, 示例: sed -n ‘/ab/w newfile’ textfile # 将匹配ab的行写入newfile 中
  • 16. 示例 7, a 追加, 在处理完当前行之后追加内容到标准输出, 示 例: sed ‘/ddd/a hello’ textfile # 处理完包含ddd模式 的行之后, 输出 hello 8, i 插入, 在处理当前行之前打印内容到标准输出, 示例: sed ‘/ddd/i hello’ textfile # 处理包含ddd模式的 行之前, 输出 hello 9, c 用指定的文本替换模式空间的文本, 并打印输出, 之 后处理下一行. 示例: sed ‘/ddd/c hello’ textfile # 替换匹配模式的行
  • 17. 示例 10, n 读取下一行, 之后的命令都会作用在下一行上面. 示例: sed '/abc/{n;s/dd/gg/g}' textfile 说明: 如果读入的行不匹配模式abc, 不执行命令默认打印该行; 如果匹配, 打印该行之后读取下一行, 对下一行执行命令 s/dd/gg/g, 之后默认打印修改后的内容 11, y 转换命令, 比如y/abc/ABC/将abc分别转换为大写, 示例: sed ‘1,3y/abc/ABC/’ textfile # 将1-3行的abc分别转换 为ABC 12, q 处理完指定行之后, 退出sed. 示例: sed ‘/ddd/q’ textfile # 处理完匹配ddd的行之后退出命令
  • 18. 暂存缓冲区 • 暂存缓冲区是模式空间之外的另一个缓冲区, sed提供了 相关的命令用于将模式空间的内容存储到暂存缓冲区 中: h 将模式空间内容复制到暂存缓冲区 H 将模式空间内容追加到暂存缓冲区 g 将暂存缓冲区内容复制到模式空间 G 将暂存缓冲区内容追加到模式空间 x 交换暂存缓冲区与模式空间内容 • 示例: sed -e '/abc/H' -e '$G' textfile 读取一行, 如果匹配abc模式追加到暂存区, 如果当前是 最后一行则将暂存区的内容追加到模式空间; 最后打印 模式空间的内容. sed -e '/abc/H' -e '$x' textfile 与上例不同的是, 如果是最后一行交换暂存区与模式空
  • 19. END