sed替换

1. sed可以替换给定的文本中的字符串,可以利用正则表达式进行匹配
$ sed ‘s/pattern/replace_string/‘ file
或者
$ cat file | sed ‘s/pattern/replace_string/‘ file
使用-i选项,可以将替换的结果应用于原文件,也可以借助重定向来保存文件:
sed ‘s/text/replace/‘ file > newfile
其实可以使用
sed -i ‘s/pattern/replace_string/‘ file
后缀/g意味着替换每一处,有时候不需要替换前N处匹配,有一个选项可以用来忽略前N处匹配,并从第N+1处开始替换。
$ echo this thisthisthis | sed ‘s/this/THIS/2g‘
$ echo this thisthisthis | sed ‘s/this/THIS/3g‘
当需要从第N处开始匹配时,可以使用/Ng
字符/在sed中作为定界符使用,也可以用其他字符代替。

1. 删除空白行
sed ‘/^$/d‘ file

2. 已匹配的字符串标记&
echo this is an example | sed ‘s/\w\+/[&]/g‘
正则表达式\w\+匹配每个单词,然后用[&]来替换它,&对应于之前所匹配的单词。

3. 子串匹配标记\1
&代表匹配给定样式的字符串,但我们也可以匹配给定样式的其中一部分
echo this is digit 7 in a number | sed ‘s/digit \([0-9]\)/\1/‘
这条命令将digit 7 替换成7,样式中匹配到的子串是7,\(pattern\)用于匹配子串,模式被包括在使用斜线转义过的()中,对于匹配到的第一个子串,其对应的标记是\1,匹配到的第二个子串是\2,往后依次类推,下面示例中包含了多个匹配:
echo seven EIGHT | sed ‘s/\([a-z]\+\) \([A-Z]\+\)/\2 \1/‘

4. 引用
$text=hello
echo "hello world" | sed "s/$text/HELLO/"

5. 追加内容 sed ‘/匹配词/a\要加入的内容’ example.file(将内容追加到匹配的目标行的下一行位置)
i 插入内容 sed ‘/匹配词/i\要加入的内容’ example.file 将内容插入到匹配的行目标的上一行位置)
示例:
#我要把文件的包含“chengyongxu.com”这个关键词的行前或行后加入一行,内容为“allow chengyongxu.cn”

行前加
sed -i ‘/allow chengyongxu.com/i\allow chengyongxu.cn‘ the.conf.file
行前后
sed -i ‘/allow chengyongxu.com/a\allow chengyongxu.cn‘ the.conf.file

6. 删除指定行的上一行
sed -i -e :a -e ‘$!N;s/.*\n\(.*ServerName abc.com\)/\1/;ta‘ -e ‘P;D‘ $file
删除指定字符串之间的内容
sed -i ‘/ServerName abc.com/,/\/VirtualHost/d‘ $filehttp://www.linuxso.com/shell/17542.html

7. 也可在vi模式下,将文本中的内容替换,esc : %s/dog/sdog/ 这样可以把文件直接修改,然后保存即可
在vi模式下也可进行区间替换,如将第2至第7行之间的cat 换成scat,esc : 2,7 s/cat/scat/ 同样保存修改即可

8. sed查找行,如查找出vsftpd.conf中的非注释行
[[email protected] shell]# cat vsfptd.conf | sed ‘/#/d‘
删除空格行和以#号开头的行,并写入文件vsftpd.config,用-e开关连接两个控制语句
[[email protected] shell]# cat vsfptd.conf | sed -e‘/^#/d‘ -e ‘/^$/d‘ >vsftpd.config

9. sed删除匹配的行的后续多行
$sed ‘/Storage/,+2d‘ thegeekstuff.txt
sed删除匹配行到尾行
$sed ‘/Website Design/,$d‘ thegeekstuff.txt
sed删除匹配行到首行

时间: 2024-11-08 21:38:10

sed替换的相关文章

Sed替换文本中的指定内容

可以这样做:方法1:sed -i 's/被替换的内容/要替换成的内容/' file 方法2:sed 's/被替换的内容/要替换成的内容/g' file > file.outmv file.out file 这里注意:不能这样做:sed 's/被替换的内容/要替换成的内容/g' file > file这样只会清空源文件. Sed替换文本中的指定内容,布布扣,bubuko.com

Linux sed 替换第一次出现的字符串

/********************************************************************************* * Linux sed 替换第一次出现的字符串 * 说明: * 需要替换配置文件中第一次出现的文本内容. * * 2016-12-16 深圳 南山平山村 曾剑锋 ********************************************************************************/ 一.参考

Python3.5 day3作业一:实现简单的shell sed替换功能

需求: 1.使python具有shell中sed替换功能. #!/usr/bin/env python #_*_conding:utf-8_*_ #sys模块用于传递参数,os模块用于与系统交互. import sys,os old_file = sys.argv[1] new_file = sys.argv[2] file_path = sys.argv[3] f = open(file_path,"r") f1 = open("back","a+&qu

用sed替换文件中的空格

请教sed 替换问题 请教各位如何替换多个空格为一个字符,如一个文件中间隔符有是一个空格,有的地方是多个空格,想全部用“|”替换,如何处理,请指教 请教sed 替换问题 [code]sed '/ \+/s//|/g'[/code] 请教sed 替换问题 来个awk的.awk '{for (i=1;i<nf;i++) printf="" $i"|";printf="" "\n"}'="" file<

sed 替换

用sed 替换比如替换‘BOOTPROTO=none' 这一行可以用这个命令:sed -i -e 's|BOOTPROTO=none|BOOTPROTO=dhcp|' conf.txt -i 是直接修改文件文件名可以放到命令最后-e ’s|aaa|bbb|' 把aaa替换成bbb

sed替换与别名配置

第1章 Sed替换与别名设置1.1 cp复制与覆盖已知/tmp下已经存在test.txt文件,如何执行命令才能把/mnt/test.txt拷贝到/tmp下覆盖掉/tmp/test.txt,而让系统不提示是否覆盖(root权限下). [[email protected] ~]# cp /mnt/test.txt /tmp/cp: overwrite `/tmp/test.txt'? 复制的时候不提示是否覆盖 1.1.1 #方法1 [[email protected] ~]# \cp /mnt/te

sed替换字符串(变量)

sed “s/查找字段/替换字段/g” echo helloworld|sed  ‘s/hello/world/g’ sed 替换字符串以变量形式 1.sed命令使用双引号的情况下,可以使用$var(变量)直接引用: echo | sed "s/^/$RANDOM.rmvb_/g" 13562.rmvb_ 2.sed命令使用单引号的情况下,可以使用'"$var"'引用(单引号,然后双引号,变量): echo | sed 's/^/'"$RANDOM&quo

sed 替换特定字符,字符串的行

1:单个字符替换 (1)将文件中的某一字符替换成其它字符 sed 'y/要替换的字符/替换后的字符/' 文件名 (2)替换以某一字符或字符串开头的行 sed '/^开头的字符串或字符/ y/要替换的字符/替换后的字符/' 文件名 (3)替换指定字符或字符串的单个字符 sed '/指定的字符串/ y/要替换的字符/替换后的字符/' 文件名 2替换多个字符串 (1)将文件中的指定的字符串全部进行替换 sed '/指定的字符串/ s/要替换的字符串/替换后的字符串/' 文件名 sed 's/要替换的字

linux sed 替换(整行替换,部分替换)、删除delete、新增add、选取

sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法 sed命令行格式为:         sed [-nefri] 'command' 输入文本 常用选项:        -n∶使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上.但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来.        -e∶直接