sed命令

sed 是非交互的,文本命令行编辑工具

#复制/etc/profile 到/tmp目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符

cp -a /etc/profile /tmp;sed 's#^[[:space:]]*##' /tmp/profile 

于是,整理下sed的命令

sed 文本命令行编辑工具

用法: sed [option]… ‘script’ inputfile…


 
常用选项:
 -n  不输出模式空间内容到屏幕,即不自动打印,进行测试,防止修改文件,没有输出
 -e  多点编辑,内嵌脚本, 命令行中给的sed执行脚本,可以给出多个命令行脚本,每个脚本都有
 -f  /PATH/SCRIPT_FILE 从指定文件中读取编辑脚本,读取指定文件是,有几个选项
 -r  支持使用扩展正则表达式 
 -i 输出到原文件,静默执行(修改原文件的意思)

sed 编辑命令:


 -d  删除模式空间匹配的行,并立即启用下一轮循环
 -p  打印当前模式空间内容,追加到默认输出之后
 -a [\]text 在指定行后面追加文本,支持使用\n实现多行追加  
 -i [\]text 在行前面插入文本
 -c [\]text 替换行为单行或多行文本
 -w /path/file 保存模式匹配的行至指定文件
 -r /path/file 读取指定文件的文本至模式空间中匹配到的行后
  =  为模式空间中的行打印行号
  !  模式空间中匹配行取反处理   

 

```bash

```bash
**sed 具体**  
sed 使用的默认分隔符 /
 **s///  查找替换,支持使用其它分隔符,s@@@,s###**
 
 替换标记:
     g 行内全局替换
     p 显示替换成功的行
     w   /PATH/FILE 将替换成功的行保存至文件中
sed示例  
1,sed ‘2p’  /etc/passwd  
2,sed  -n ‘2p’ /etc/passwd  #显示第二行的账号信息
3,sed  -n ‘1,4p’ /etc/passwd  #显示第一到第四行的信息
4, sed  -n ‘/root/p’  /etc/passwd  #显示有root 的信息
5,sed  -n ‘2,/root/p’  /etc/passwd      # 从2行开始,显示内容中有root的行数信息
6,sed  -n ‘/^$/=’  file 显示空行行号
7,sed  -n  -e ‘/^$/p’ -e ‘/^$/=’  file #仅显示空白行的行号
8,Sed‘/root/a\superman’  /etc/passwd行后
9,sed ‘/root/i\superman’ /etc/passwd 行前
10,sed ‘/root/c\superman’ /etc/passwd 代替行   
11,sed ‘/^$/d’ file    #显示没有空白行的其他行数
11,sed ‘1,10d’   file  #显示前10行
12,nl   /etc/passwd | sed ‘2,5d’ #显示内容,排除2-5行内容
13,nl   /etc/passwd | sed ‘2a tea’ # 在第二行下添加一行 内容为tea
14,sed 's/test/mytest/g' example #显示替换后的内容
15,sed –n ‘s/root/&superman/p’ /etc/passwd  #显示 root后面添加字符的行数 
16,sed –n ‘s/root/superman&/p’ /etc/passwd 单词前  显示root前面添加字符的行数
17,sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’  test.txt #一个文本文件中的多个字符替换
高级编辑命令  
P: 打印模式空间开端至\n内容,并追加到默认输出之前
h:  把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加至保持空间中
g:  从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x:  把模式空间中的内容与保持空间中的内容进行互换
n:  读取匹配到的行的下一行覆盖至模式空间
N:读取匹配到的行的下一行追加至模式空间
d:  删除模式空间中的行
D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本, 并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间 不包含换行符,则会像发出d命令那样启动正常的新循环 

================================================================

sed 经常被使用于文本过滤,它接受文本输入,对文本进行一些操作或者一组操作,同时将修改后的文本输出sed通常使用于模式匹配,提取文件的一部分,或者替换文件内多次出现的字符串。

四 sed正则模式匹配

单个字符{如果没有特殊字符},进行匹配文本
匹配前一个字符的零个或多个重复序列分组或着类
+ 和*类似,但匹配一个或者更多
? 和*类似,仅匹配0次或者1次
{i}  和*类似,但是和i 完全匹配,匹配的字符介于 0-255个
{i,j} 介于 i和j 之间,包括i,j
{i,} 匹配多个或者匹配i
{,j} 最多匹配j或者等于j个
(RE)\  组作为一个整体,用于:
应用后缀运算符,如 '(abcd)',这将搜索零个或者多个完整的
"abcd"序列,如果 'abcd*', 它将搜索"abc",后面跟0个或者多个d
使用反向引用
.       匹配任意字符
^       匹配行首的空字符串,即^之后出现的内容必须出现在行首,
例如:
'^#include' 将只匹配第一行中的 “#include”的行,
但是,如果之前有一两个空格,那么匹配失败。
$ 和^类似,匹配行尾
\c 匹配字符 "C" 用于匹配特殊字符
[list] 匹配列表中的任意单个字符。 例如: [aeiou] 匹配所有原音
[^list] 匹配不再列表的任意字符。
列表可以由 - , 表示,和之间的
所有字符都要包含再列表中,使其成为列表中第一个包含`]' 的字符
'-' 使得其成为第一个或者最后一个字符
RE1|RE2  匹配RE1或者RE2
\1 \2 \3 \4 \5 \6 \7 \8 \9, => \i
匹配re的第i个引用,这称为反向引用,通常它非常慢
注意:
sed 某些实现可能没有提到所有的res,特别是 '+' '?'
'|'
-RE 是贪婪的,如果检测到两个或者更多匹配,它选择最长的,如果有
两个或者更多学则具有相同大小的,它选择文本中的第一个
例子:
  'abcdef'  匹配"abcdef"
   'a*b' 匹配0个或者多个 “a” ,后面跟一个"b"
   比如: "b" 或者 “aaaaab”
   'a?b' 匹配 "b"或者"ab"
   'a+b+' 匹配1个或多个 "a",然后是一个或多个 "b",最小匹配将是
   "ab",但是 "aaaab" 或"aaaaabbbbb"也依然匹配
   '.*' 全匹配,文本所有行的字符,包括空字符
   '.+'  全匹配,但仅包含至少一个字符的行,也就是说,空行不匹配。
   'main(.)' 搜索 “main”的行作为改行的第一件事,该行还包含一个
   左括号和右括号, () 是任意数量字符(包括空)前后的左括号。
   '^#'  匹配 "#"号开始的行
   '\$'  所有单个以 '' 结尾的行,有两个,用于转义。
   'a-zA-Z_' 任意字母或者数字
   '[^ ]+' (一个tab键和一个空格)  不是空格或 制表符的任何字符的一个或者多个
   '^.A.$' 匹配中间有 "A" 的字符
   'A.{9}$'  匹配正好是第十行的最后一个字符 “a”
   '^.{,15}A' 匹配该行前16个字符的最后一个 "A"

例子
#获取centos的IP

[root@localhost ~]# ifconfig|sed  -nr '2s/(^[^0-9]+)([0-9.]+)( .*$)/\2/p'
或者
[root@localhost ~]# ifconfig|sed -n 2p‘|sed -r 's/(^[^0-9]+)([0-9.]+)( .*$)/\2/p'
192.168.233.150
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值