Sed命令的用法

Sed命令的用法

sed可删除(delete)、改变(change)、添加(append)、插入(insert)、合、交换文件中的资料行,或读入其它档的资料到文>件中,也可替换(substuite)它们其中的字串、或转换(tranfer)其中的字母等等。当sed由标准输入读入一行资料并放入pattern space时,sed依照sed script 的编辑指令逐一对pattern space内的资料执行编辑,之後,再由pattern space内的结果送到标准输出,接着再将下一行资料读入.如此重执行上述动作,直至读>完所有资料行为止。

 sed总是以行对输入进行处理
 sed处理的不是原文件而是原文件的拷贝
指令格式 :
sed options script file;
script:
用法一:[address1[,address2]]command  #指定行执行一个命令时
用法二:[address1[,address2]]{ #指定行执行多个命令时
                             command1
                             command2
                             command3
            }
 [address1[,address2]]表示命令做作用于文本的某行或某些行。
 例:
    sed '2s/dog/cat/' data1   #将data1中的第2行中的dot替换为cat
    sed '2,4s/dog/cat/' data1  #将data1中的第2~4行中的dot替换为cat
option:

-e script 在处理输入时将script中指定的命令添加到运行的命令中;

例:$ sed -e '
    > s/brown/green/
    > s/fox/elephant/
    > s/dog/cat/ ' filename

-f file 在处理输入时,将file中指定的命令添加到运行的命令中;
例:$ sed -f script1 filename #script1为脚本文件:“sed options script file”中的script
-n 不要为每个命令生成输出,等待print命令来输出,即禁止sed编辑器输出;
-r sed 的动作支援的是延伸型正则表达式的语法。(预设是基础正则表达式语法)
-i 重点内容直接修改读取的文件内容,而不是由屏幕输出

flags

数字:表明新文本将会替换掉第几处模式匹配的地方;
g:表明新文本将会替换掉所有已有文本出现过的地方,如果不添加,就会只会对每行第一次匹配的地方做处理,一般用于字符替换时使用;
p:表明原来行的内容要打印出来;
w file:将替换的结果写到文件中;

function

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(当前行的下一行);
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行;
d :删除, d 后面通常不接其他flags;
i: 插入,插入的文本将插入在指定位置的前面;

$ echo 'Test Line 2'|sed 'i\Test Line 1'
输出:Test Line 1
     Test Line 2 

p :列印,亦即将某个选择的数据印出。通常 p 会与参数sed -n 一起运行;
s :取代,取代,用新字串替换就字串,arguments可以为:1,20s/old/new/g

s/pattern/replacement/flags

option

{ }  集合有相同位址参数的指令。
!  不执行函数参数。
=  印出资料行数( line number )。
b label  将执行的指令跳至由 : 建立的参考位置。
D  删除 pattern space 内第一个 newline 字母 / 前的资料。
g  拷贝资料从 hold space。
G  添加资料从 hold space 至 pattern space 。
h  拷贝资料从 pattern space 至 hold space 。
H  添加资料从 pattern space 至 hold space 。
l  印出 l 资料中的 nonprinting character 用 ASCII 码。
n  读入下一笔资料。
N  添加下一笔资料到 pattern space。
P  印出 pattern space 内第一个 newline 字母 / 前的资料。
q  跳出 sed 编辑。
r  读入它档内容。
t label  先执行一替换的编辑指令 , 如果替换成牛p>则将编辑指令跳至 : label 处执行。
w  写资料到它档内。
x  交换 hold space 与 pattern space 内容。
y  转换(transform)字元。
实例:

1、删除

(1) sed -e '1d' inputfile #删除第一行
    sed -e 'xd' inputfile #删除第x行
    sed -e 'x1d' -e 'x2d' -e 'x3d' inputfile #删除第x1,x2,x3行
当然也许还有更好的办法。
(2) sed -e '1,3d' file #删除第一到第三行
     sed -e '1,$d' file     # 删除第一行到最后一行
(3) sed -e '/#/d' file  #删除含有'#'号的行
    sed -e '/B/!d' file #除含有字符串B的行全部删除
(4) sed -e '/word1/, /word2/d' file  #删除从含有单词word1到含有单词word2的行
(5) sed -e '/t.*t/d' file     (删除以t开头以t结尾的行)

2、 替换
Sed 可替换文件中的字串(用s命令)、资料行、甚至资料区(用c命令)。
[address1[ ,address2]] s/pattern/replacemen/[flag]
替换行-c命令

(1) sed -e '1c/#!/bin/more' file #把第一行替换成#!/bin/more
    sed -e 'nc/a b c' file #把第n行替换成a b c
(2) sed -e '1,10c/I can do it' file  #把1到10行替换成一行:I can do it
   sed -e '1,10c/hahaha/nxixixi' file #换成两行hahaha xixixi,换成多行时在每行中间添加行分隔符/n

(3) sed -e 's/string1/& string 2/g' file #在每行中所有出现string1的地方后面添加 string2
    [root@localhost shelltest]# cat aa
     aaaa
     aaa
    [root@localhost shelltest]# sed 's/aa/& bbcc/' aa #没有加flag:g 所以只匹配了每行的第一个 
    aa bbccaa
    aa bbcca

替换指定行的内容

sed -e '/machine/s/phi/beta/g' file #将文件中含"machine"字串的行中的"phi"字串,替换成为"beta"字串
sed -e '1,10 s/w1/& w2/g' file #把1到10内的w1字符串替换成w1 w2字符串。

3、插入内容-i命令(当前行的上一行)-a命令(当前航的下一行)
[address1] i/insercontent/[flag]
[address1] a/insercontent/[flag]

sed -e '1i/words' file      #在第一行前面插入一行words
sed -e '/aa/i/words' file   #在含有aa字串的行前面插入一行words

4 、文本的打印: p,常与-n搭配使用

(1) sed -e '/then/ p' filename  #打印所有行并重复打印含有then 的行
(2) sed -n '/then/ p' filename  #只打印含有then的行
(3) sed -e '1,3 p' filename     # 打印所有行并重复1-3行
(4) sed -n '1,3 p' filename     # 打印1-3行
(5) sed -n '/if/,/fi/ p' filename #打印字符if和fi之间的内容

5 、字元的替换: y,以单个字母为单位替换

sed -e 'y/abc../xyz../' filename #把文件中的a字母替换成x, b替换成y, c替换成z。

6 、改变文件中的资料: c
基本格式:
[address1[ ,address2]]c/ filename
函数参数 c 紧接着 “/” 字元用来表示此行结束 , 使用者所输入的资料必须从下一行输入。如果资料超过一行 , 则须在>每行的结尾加入”/”

sed -e '/zhengxh/c hhhh' filename
表示把含有字符串zhengxh的行,该成hhhh。

8、 读入下一行资料: n

[address1[ ,address2]] n
sed -n -e '/echo/n' -e 'p' temp # 表示输出文件,但如果一行含有字符串echo,则输出包含该字符串的下一行。
sed -n -e 'n' -e 'p' filename #输出文中的偶数行

9、命令的复用

一次执行多个命令的方式有三种:
(1) sed 's/w1/& w2/g; 1/i/words' filename   (使用;号把命令隔开,注意前面不加-e参数)
(2) sed -e 'cmd1' -e 'cmd2'  filename     (使用多个-e参数)

参考文档:
http://blog.youkuaiyun.com/zg_hover/article/details/1804481
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html
http://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html

<think>好的,用户想了解Linuxsed命令的使用教程和示例。首先,我需要回忆一下sed的基本功能和常用选项。sed主要用于流式文本处理,可以实现替换、删除、插入等操作。用户可能希望看到结构化的讲解,比如命令格式、常用选项、示例等。 首先,我应该解释sed的基本结构,比如命令格式:`sed [选项] '操作指令' 文件`。然后列出常用的选项,比如-n、-i、-e等,每个选项的作用需要简明扼要地说明。 接下来是操作指令部分,用户可能需要知道如何替换、删除、插入等。替换命令s是最常用的,需要详细说明语法,比如`s/原字符串/替换字符串/修饰符`,并举例说明不同修饰符的作用,如g全局替换,p打印等。 然后,用户可能需要具体的示例来理解这些命令。比如删除空行、替换文本、插入行等。要注意示例的多样性,覆盖不同的使用场景,比如处理文件、结合正则表达式等。同时,结合用户提供的引用内容,确保示例准确,比如引用[1]中的删除空行示例,引用[4]中的原地编辑文件。 还要注意用户提到的注意事项,比如-i选项的风险,正则表达式的转义问题,这些都需要在教程中提醒用户,避免常见错误。此外,用户提供的引用中有多个示例,可以整合到回答中,比如查找特定行、多命令执行等。 最后,生成相关问题,帮助用户进一步学习,比如sed的高级用法、正则表达式技巧、与其他命令的配合使用等。这些问题应该覆盖用户可能感兴趣的扩展知识点,参考引用中的内容,比如引用[2]中的替换空格示例,引用[3]中的复杂正则处理。 整个过程中需要确保使用中文,LaTeX格式正确,行内公式用$...$,独立公式用$$...$$,但可能在这个问题中公式使用较少,主要关注命令示例的结构和格式。检查是否有遗漏的重要sed功能,比如模式空间和保持空间,但根据用户提供的引用,可能不需要深入这些高级话题,保持教程基础实用即可。</think>### Linux sed命令使用教程及示例 #### 一、sed命令基础 **sed**(Stream Editor)是Linux中基于文本流的非交互式编辑器,通过指令对文本进行批量处理,支持正则表达式。其基本格式为: ``` sed [选项] '操作指令' 文件 ``` #### 二、常用选项 | 选项 | 功能 | |------|------| | `-n` | 仅显示处理后的行(需配合`p`指令) | | `-i` | 直接修改文件内容(慎用,建议先备份) | | `-e` | 执行多条指令(例如:`-e 's/a/A/' -e 's/b/B/'`) | | `-f` | 从文件读取指令(例如:`sed -f script.sed file`)[^4] | #### 三、核心操作指令 1. **替换**:`s/原字符串/替换字符串/修饰符` - 示例:`sed 's/old/new/g' file.txt`(全局替换`old`为`new`) - 修饰符: - `g`:全局替换 - `p`:打印匹配行(需与`-n`配合) - `i`:忽略大小写(例如:`s/hello/HELLO/gi`) 2. **删除**:`d` - 示例:`sed '/^$/d' file.txt`(删除所有空行)[^1] 3. **插入/追加**: - `i\`:在匹配行前插入 - `a\`:在匹配行后追加 - 示例:`sed '/aa/a\INSERT_LINE' file.txt`(在包含`aa`的行后插入新行) 4. **打印**:`p` - 示例:`sed -n '/proxy_pass/p' nginx.conf`(仅打印包含`proxy_pass`的行)[^1] #### 四、典型应用示例 1. **删除空行及注释行**: ```bash sed '/^#/d; /^$/d' file.txt # 删除以#开头的行和空行 ``` 2. **批量替换文件内容**: ```bash find . -name "*.sh" -exec sed -i '1c#!/bin/bash' {} \; # 将所有.sh文件首行替换为#!/bin/bash[^1] ``` 3. **正则表达式替换**: ```bash sed -E 's/[0-9]{4}-[0-9]{2}-[0-9]{2}/DATE/g' log.txt # 将日期格式替换为DATE ``` 4. **多指令组合**: ```bash sed -e 's/fuck//g' -e 's/草//g' file.txt # 删除敏感词[^1] ``` #### 五、注意事项 1. **备份文件**:使用`-i`前建议先执行`cp file.txt file.txt.bak`。 2. **正则转义**:特殊字符如`.`需转义为`\.`。 3. **性能优化**:处理大文件时避免频繁写入,可结合管道与其他命令(如`grep`、`awk`)配合使用。 --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值