`
zhyiwww
  • 浏览: 90021 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于sed替换的一点自我体会(转载)

阅读更多
www.lupaworld.com/bbs/viewthread.php
################################################################
#[0]:基础 #
################################################################
**sed执行过程:
a. 如果已到达文件尾,goto e;否则,用当前行内容替换模式空间的内容(即缓冲区,还有一个缓冲区:后备空间);
b. 执行命令序列,命令只对模式空间有效;
c. 当前行号加1
d. goto a;
e. 退出
注: 当前行号可由命令N或n更改,当前行号最初为第1行
执行命令时,如果该命令有地址前缀,那么看*当前行号*是否与地址前缀相符,相符则执行,否则不执行
例子:
$sed -e 'p;p;i \
my-inserted-text
p;
a \
my-appended-text
p;' filename
这个例子中有6条命令:4个p命令,1个i命令,1个a命令;
$sed -e '2p;3,5p;6~10i \
my-inserted-text
p;
7a \
my-appended-text
/AA/p;' filename
这个例子类似上个,仅加入了地址前缀
((详情请参考下文))
**常用方法:
命令:
sed 'commands' targetfile
echo "string" |sed 'commands'
脚本:
#!/bin/sed -f
command1
command2
...
**选项:
-V
--version
提示版本信息
-h
--help
提示帮助信息
-n
--quite
--silent
默认情形,sed在执行完用户提交的命令列表后,会执行p命令,这3个选项能屏蔽这个默认功能
-e
--exception=scrīpt
增加scrīpt命令列表到当前命令列表
-f
--file=scrīpt-file
增加scrīpt-file文件内的命令列表到当前命令列表
初始时,当前命令列表为空;如果没有-e,--exception,-f,--file选项,那么命令行的第一个非选项参数被
当作命令列表添加到当前命令列表中

**常见命令:
可带范围地址前缀的命令(11个):
d 删除模式空间的内容,goto c
D 删除模式空间内的第一行,如果模式空间内还有内容,goto b,否则,goto c
p 将模式空间中的内容输出到标准输出
P 将模式空间中的第一行内容输出到标准输出
N 读入下一行,将其*追加*到模式空间尾,当前行号加1,如果没有可读的行了,goto e
n 读入下一行,用它*替换*模式空间内容,当前行好加1,如果没有可读的行了,goto e
h 用模式空间内容*替换*后备空间内容
H 将模式空键内容*追加*到后备空间尾
g/G 同h/H,但方向相反,后备空间->模式空间
x 交换模式空间和后备空间内容
l 输出模式空间内容到标准输出,以更人性话的方式输出
例子:
$echo -ne "AA BBBB\nCCCDDDD\nFDSAFDSA\n"|sed -n 'l'
AA BBBB$
CCCDDDD$
FDSAFDSA$
{ 命令块的开始,以 } 结束
b label 跳转到标签label处,如同c语言的goto语句
t label 从最近一次从标准输入读入一行开始 到 现在,如果执行了替换命令,且替换成功了,
那么跳转到label处,继续执行;否则执行下一条命令.
相当于条件跳转
s/regexp/replacement/
对模式空间内容进行替换,只替换与regexp匹配的部分;
只对第一次匹配的进行替换
s/regexp/replacement/g
对模式空间内容 对模式空间内容进行全局替换
y/source/dest/
逐个字符替换,其中source的长度必须与dest相等
如:source为ABC,dest为abc,那么模式空间内的所有A字符被换成a,B换成b,C换成c
以最后一对替换为标准,
如:source为ABA,dest为abc,那么模式空间内的所有A字符被换成c(而不是a),B换成b
例子:
$echo ABCD |sed -n 'y/ABA/abc/;p'
cbCD
w file 把模式空间的内容写到file文件内
sed在它开始执行前,如果在当前命令序列中发现了这条命令,先将文件file清空(如果存在的话;不存在则创建),
之后所有的写入都是被追加到文件file尾
不带地址前缀的命令(3个):
#comments 注释
: label 设置标签
} 与}匹配
最多能带一个地址的命令(5个):
= 输出当前行号到标准输出
a \
text 执行完所有命令后,输出text到标准输出
i \
text 输出text到标准输出
q 如果没有 -n 选项,则goto e;否则,先输出模式空间内容到标准输出,然后goto e;
r file file表示一个文件,如果这是最后一条命令,则输出文件file的内容到标准输出,然后goto c;
否则,goto c;
**地址格式(数字代表行号,从1开始):
例子:
单地址: 1 第一行
/string/ 与string匹配的行
$ 最后一行
范围地址: 单地址,单地址
例子:
1,2 或 1~2
1,$所有行
多行: /regexp/ 代表与正则表达式regexp匹配的行
\cregexpc 代表与正则表达式regexp匹配的行,其中c可为任意字符
**带地址前缀的命令:
例子:
1p
1,3p 或 1~3p
################################################################
#[1]:元字符 * + ? { } ( )< > #
################################################################
* 在当前模式内*前有匹配字符时,表示个数(>=0个);
例子:
$echo 'aaabbbbcdddd' |sed 's/\(a*\)/|\1|/'
|aaa|bbbbcdddd
* 在当前模式内*前无匹配字符时,表示字符'*';
例子:
$echo 'a*abbbbcdddd' |sed 's/a\(*\)/|\1|/'
|*|abbbbcdddd
$echo 'a*abbbbcdddd' |sed 's/*/|z|/'
a|z|abbbbcdddd
\* 表示字符'*';
例子:
$echo 'a*abbbbcdddd' |sed 's/\(a\*\)/|\1|/'
|a*|abbbbcdddd
? 表示字符'?';
例子:
$echo 'a?abbbbcdddd' |sed 's/?/|z|/'
a|z|abbbbcdddd
\? 在当前模式内?前有匹配字符时,表示个数(0或者1个);
例子:
$echo 'aa?bbbbcdddd' |sed 's/\(a\?\)/|\1|/'
|a|a?bbbbcdddd
\? 在当前模式内?前无匹配字符时,表示字符'?';
例子:
$echo 'aa?bbbbcdddd' |sed 's/\(\?\)/|\1|/'
aa|?|bbbbcdddd
+ \+ 的意义类似 ? \?,只不过表示数字时为>=1个
{ 表示字符'{'
} 表示字符'}'
\{ \} 用于表示出现次数,出现\{时,必须出现\}.
单个\}出现时,表示字符'}'
例子:
$echo '({(aabbb}d' |sed 's/b\{1,\}\}/|z|/'
({(aa|z|d
成对\{ \}的3种格式: \{1\} \{1,\} \{1,9\}, 如上例
( 表示字符'('
) 表示字符')'
\( \) 必须成对出现,表示子模式
例子:
$echo 'a*abbbbcdddd' |sed 's/\(a\*\)/|\1|/'
|a*|abbbbcdddd
\< \> 表示完全匹配一个单词
[zleil@ZLEIL shApp]$ echo "abc" | sed '/b/s/\<ab\>/AB/g'
abc
[zleil@ZLEIL shApp]$ echo "ab c" | sed '/b/s/\<ab\>/AB/g'
AB c
< > 表示普通字符 < >
**关于label的例子
这有几个关于label的例子,
[zleil@ZLEIL shApp]$ echo "aBBbc" | sed -n 'p;b label;p;:label;p';
aBBbc
aBBbc
[zleil@ZLEIL shApp]$ echo "aBBbc" | sed -n 's/B/k/;t label;p;:label;p';
akBbc
[zleil@ZLEIL shApp]$ echo "aBBbc" | sed -n 's/D/k/;t label;p;:label;p';
aBBbc
aBBbc
分享到:
评论

相关推荐

    Linux_sed_批量替换字符串方法

    ### Linux sed 批量替换字符串方法详解 #### 一、sed简介 `sed`(stream editor)是一款功能强大的文本处理工具,在Linux系统中被广泛应用于批量处理文本文件,特别是进行字符串查找、替换等操作。本文将详细介绍...

    Linuxsed批量替换字符串方法.pdf

    sed的替换功能基本语法是`sed 's/原字符串/新字符串/g' 文件名`,其中`'s'`表示替换操作,`'g'`表示全局替换,即在一行中出现的所有匹配项都会被替换。 例如,将文件中的所有“zhangsan”替换为“lisi”: ```bash ...

    sedsed工具

    2. **替换操作**:`sedsed 's/old/new/g' file.txt` 将`file.txt`中所有"old"替换为"new"。 3. **条件删除与替换结合**:`sedsed -d '/pattern/; s/another_pattern/replacement/g' file.txt` 删除匹配`pattern`的行...

    sed-4.2.1.rar包括sed-4.2.1-setup.exe、sed-4.2.1-dep.zip、sed-4.2.1-bin.zip

    1. **文本替换**:`sed`最基础的功能就是替换文本,例如,用新的字符串替换旧的字符串,或者根据正则表达式进行更复杂的替换。 2. **行过滤**:`sed`可以按条件打印或删除特定行,这对于处理日志文件或数据分析非常...

    Python 实现简单的shell sed替换功能(实例讲解)

    `sed` 是流编辑器(Stream Editor),它能够对文本进行查找、替换和删除等操作,广泛用于批处理脚本和命令行交互。然而,在Python编程环境中,我们可以通过编写Python代码来实现类似的功能,从而在不需要依赖特定操作...

    Linux使用sed命令替换字符串教程

    在Linux系统中,`sed`(流编辑器,Stream Editor)是一个强大的文本处理工具,用于在输入流中进行模式匹配和替换操作。本文将详细介绍如何使用`sed`命令来替换字符串,并探讨其相关的选项和用法。 ### 基本替换语法...

    sed-4.2.1-setup

    例如,`sed 's/old/new/g'` 命令会将所有出现的 "old" 替换为 "new"。 2. **行操作**:可以删除、插入、追加文本。例如,`sed '/pattern/d'` 会删除所有包含指定模式的行;`sed -i 's/pattern//g' file` 将在原文件...

    sed and wak 101

    Gnu `sed`提供了一些额外的替换标志,如`\u`用于将小写字母转换为大写,`\l`用于将大写字母转换为小写。例如,将所有字母转换为大写: ``` sed 's/pattern/\U&/g' file.txt ``` 这将把文件`file.txt`中所有`...

    sed and awk 101 hacks

    《sed and awk 101 hacks》是一份关于学习和提升sed和awk使用技巧的文档。文档主要涵盖了sed命令的基础使用、高级技巧以及如何与awk结合使用的方法。本文将详细解读文档中的知识点,以便为读者提供一个全面的参考。 ...

    Sed AWK编程指南

    sed 's/old/new/\L/g' file.txt # 将替换后的字符串全部转换为小写 ``` #### 四、正则表达式 ##### 20. 正则表达式基础 正则表达式是用于匹配字符串的强大工具,`sed` 支持多种正则表达式语法。 示例: ``` sed ...

    windows下cmd程序sed命令所需文件

    - 替换文本:`sed 's/要替换的文本/新文本/g' 文件名`,这里的`g`表示全局替换。 - 删除指定行:`sed '/模式/d' 文件名`,这会删除所有匹配模式的行。 - 查找匹配行:`sed '/模式/p' 文件名`,仅打印匹配模式的行。 ...

    Linuxsed批量替换字符串方法[归类].pdf

    - `s/zhangsan/lisi/g`:这是sed的替换命令,`s`代表替换,`zhangsan`是要查找的字符串,`lisi`是替换后的字符串,`g`表示全局替换,即替换每一行中所有的匹配项,如果不加`g`,则只替换每行的第一个匹配项。...

    sed手册完整版

    无论是简单的文本替换还是复杂的文本处理逻辑,sed都能够胜任。通过了解sed的基本命令和功能,以及如何编写sed脚本来组合这些命令,可以极大地提高文本处理效率。希望以上内容能够帮助初学者更好地理解和掌握sed的...

    linux下perl,sed,shell批量替换文件内容.docx

    其中,`sed -i` 命令将执行 sed 编辑器,`s/原字符串/新字符串/g` 是 sed 代码,用于执行字符串替换操作,`grep` 命令用于查找包含原字符串的文件,`-r` 选项用于递归查找,`-l` 选项用于显示文件名。 例如,要将...

    通用线程sed 实例

    ### 通用线程sed实例详解 #### sed简介与特点 sed是一种极其强大的UNIX流编辑器,因其高效且灵活的功能在日常运维与开发工作中备受青睐。本文将深入介绍sed的基础概念及其高级用法,并通过一系列实用示例帮助读者...

    sed.exe win x32 x64

    标题中的"sed.exe win x32 x64"指的是在Windows操作系统中,为32位(x32)和64位(x64)系统提供的sed命令行工具。sed(流编辑器Stream Editor)是一个功能强大的文本处理工具,常用于Linux和Unix系统中,但在Windows上...

    sed(windows)

    2. **批量替换文件中的字符串**:`sed -i 's/old/new/g' file.txt` 在原文件上进行替换,`-i` 表示就地修改。 3. **删除特定行**:`sed '/^pattern/d' file.txt` 删除以 "pattern" 开始的行。 4. **添加行**:`sed...

    玩透sed:探究sed原理

    3. **命令替换(Command Substitution)**:`s/pattern/replacement/flags`是`sed`最常用的命令,用于替换匹配到的模式。`flags`是可选的,如`g`全局替换,`i`忽略大小写,`p`打印替换后的行。 4. **缓冲区(Buffer...

    sed中文指南 详细介绍了SED的用法与实例

    SED的主要优势在于它能够高效地处理重复性的文本编辑任务,如字符串替换、行的删除和插入等,特别适合于批量处理大型文本文件。 #### 2. SED的应用场景 在日常的文本处理工作中,SED常常被用来执行以下几种常见的...

    linux Sed 使用手册

    - `sed -n 's/^test/mytest/p' example`:仅打印那些进行过替换的行,如果某行开头的`test`被替换为`mytest`,则该行将被打印。 - `sed 's/^192.168.0.1/&localhost/' example`:所有以`192.168.0.1`开头的行,将在...

Global site tag (gtag.js) - Google Analytics