常用sed用法

sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
sed基本格式

sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

打印单行

  sed -n '行号p' stop_crm_http_forcboss_new_01.sh

打印范围
sed -n '行号,行号p' stop_crm_http_forcboss_new_01.sh
打印有此模式的行

`sed -n '/cboss/'p stop_crm_http_forcboss_new_01.sh  
  等于  
cat stop_crm_http_forcboss_new_01.sh|grep cboss`
    最后一行插入字符
  sed -i '$a\要插入的字符'
   文件名在指定行行首插入字符(s 表示替换指定字符;^表示匹配行的开始,如:/^sed/匹配所有以sed开头的行。$表示匹配行的结束,如:/sed$/匹配所有以sed结尾的行。)
  sed -i '行号s/^/要插入的字符/' 文件名

sed中使用变量用单引号包含双引号来引用变量,或者使用双引号。g表示 获得内存缓冲区的内容,并替代当前模板块中的文本。

  sed 's/'"${tmp}"'/'"${new_tmp}"'/g' ${new_file_name}
sed "s/${tmp}/${new_tmp}/g" ${new_file_name}

有时替换不想全部替换,可以使用,如下,从第二处匹配的地方开始替换

sed 's/'"${tmp}"'/'"${new_tmp}"'/2g' ${new_file_name}
删除行首空格
sed 's/^[ \t]*//g'
删除行末空格
sed 's/[ \t]*$//g'
删除所有的空格
sed 's/[[:space:]]//g'
删除空白行:
sed '/^$/d' file
删除文件的第2行:
sed '2d' file
删除文件的第2行到末尾所有行:
sed '2,$d' file
删除文件最后一行:
sed '$d' file
删除文件中所有开头是test的行:
sed '/^test/'d file

sed中使用或者,将A或者B替换成C。用中括号,里面使用‘|’符号

sed ‘s/[A|B]/C/g’ stop_crm_http_forcboss_new_10.sh

已匹配字符串标记&(正则表达式 \w+ 匹配每一个单词,使用 [&] 替换它,& 对应于之前所匹配到的单词)

echo this is a test line | sed 's/\w\+/[&]/g'
[this] [is] [a] [test] [line]

所有以192.168.0.1开头的行都会被替换成它自已加localhost:

sed 's/^192.168.0.1/&localhost/' file
192.168.0.1localhost

一般sed使用”/”作为定界符,但是也是可以用任何的定界符

sed 's:test:TEXT:g'
sed 's|test|TEXT|g'
sed 's:/bin/sh:/bin/bash:g' tmp.txt
当转换的内容含有定界符,需要转义

sed 's/\/bin\/sh/\/bin\/bash/g' tmp.txt

多点编辑:e命令( 同一行里执行多条命令, -e 等价的命令是 –expression)

sed -e '1,5d' -e 's/test/check/' file

从文件读入:r命令
file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面:
sed ‘/test/r file’ filename

写入文件:w命令
在example中所有包含test的行都被写入file里:
sed -n ‘/test/w file’ example

插入(行上):i\命令
将 this is a test line 追加到以test开头的行前面:
sed ‘/^test/i\this is a test line’ file

在test.conf文件第5行之前插入this is a test line:
sed -i ‘5i\this is a test line’ test.conf

下一个:n命令
如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续:
sed ‘/test/{ n; s/aa/bb/; }’ file

变形:y命令
把1~10行内所有abcde转变为大写,两边的字符数需要相等。注意,正则表达式元字符不能使用这个命令:
sed ‘1,10y/abcde/ABCDE/’ file

退出:q命令
打印完第10行后,退出sed
sed ‘10q’ file

保持和获取:h命令和G命令
在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将 打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。

sed -e '/test/h' -e '$G' file

在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中的行的末尾。在这个例子中就是追加到最后一行。简单来说,
任何包含test的行都被复制并追加到该文件的末尾
。保持和互换:h命令和x命令
互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换:
sed -e ‘/test/h’ -e ‘/check/x’ file

打印奇数行或偶数行
方法1:

sed -n 'p;n' test.txt #奇数行
sed -n 'n;p' test.txt #偶数行

方法2:

sed -n '1~2p' test.txt #奇数行
sed -n '2~2p' test.txt #偶数行打印

匹配字符串的下一行

grep -A 1 SCCFILE                                           #1可以变,也可以打印SCC匹配行下两行
sed -n '/SCC/{n;p}' FILE
awk '/SCC/{getline; print}' FILE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值