标签:linux sed
linux之sed用法
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法
sed命令行格式为:
sed [-nefri] ‘command’ 输入文本
常用选项:
-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。
常用命令:
a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
sed 流编辑器,行编辑器,一次只操作一行,默认不会修改原文件
---sed 一次从文件从读取一行,读取到模式空间,根据指定条件(定界符)范围内的行放到模式空间,然后根据模式进行匹配,
如果能够匹配的到就进行处理,否则不进行处理!sed 默认会把模式空间中未被处理的行显示出来!
sed {options} ‘script‘ input_file
sed -f "script_file" input_file
‘address command {para}‘ 地址,命令,可选参数 -->sed ‘1,3d‘ /etc/fstab
1:不指定地址则表示所有行
2: 地址定界
1,7
1,+6
3 第三行
/patterm/ 能够被模式匹配到的行就进行处理,默认是基本正则表达式
基本正则表达式
匹配字符:
. 匹配单个字符
[] 指定的单个字符
[^] 非指定范围的单个字符
次数匹配:
* 匹配其前的字符任意次
? 匹配其前字符0或1次
\{m,n\} m到n次
锚定符:
\<,\b 词首
\>,\b 词尾锚定
^ 行首锚定
$ 行尾锚定
^$ 空白行
.* 任意字符
分组:
\(\)
\1 ,\2
扩展的正则表达式:
匹配字符:
. 匹配单个字符
[] 指定的单个字符
[^] 非指定范围的单个字符
次数匹配:
* 匹配其前的字符任意次
? 匹配其前字符0或1次
{m,n} m到n次
锚定符:
\<,\b 词首
\>,\b 词尾锚定
^ 行首锚定
$ 行尾锚定
^$ 空白行
.* 任意字符
多出的元字符:
次数:+(其前的字符至少一次)
或者: |
COMMAND:
d: 删除 sed ‘/^\//d‘ /etc/fstab 删除/开头的行
a:\ 增加 sed ‘/^\//a \# this is a / line‘ /etc/fstab 在/开头的行追加写入# this is a / line
i: \ 插入 和a相反,插入的是当前行的前一行
p: 打印
r: 读取文件写入sed ‘/CentOS/r /root/work/pass‘ /etc/issue将pass写入CentOS这行之下
s/pattern/string/
g:全局修改
i:不区分大小写
=:显示行号 sed ‘/^[a-z]/=‘ /etc/issue
OPTIONS:
-n:--quiet 安静模式,只显示匹配的行
-r: 扩展正则表达式
-i: 直接修改文件
-e: -e ‘script1‘ -e ‘script2‘
sed -e ‘s/^[[:space:]]\{1,\}\([^[:space:]]\{1,\}\)/\1/‘ -e ‘s/\<default/DEFAULT/g‘ /boot/grub/grub.conf
-f: 可以直接引入脚本文件---将COMMAND写入script文件中
man sed !!!!!!!!!!!!标签:linux sed
原文地址:http://liuguan.blog.51cto.com/9136714/1570886