1、sed命令
Linux文本处理三剑客 之 sed
sed stream EDite
作为行编辑器,对文本进行编辑(以行为单位进行编辑)
注意:sed编辑文件,不改变原文件
sed工作原理:
指定一个文本文件,依次读取文本文件中每行的内容,读取到模式空间中(PATTERN SPACE),在模式空间中进行匹配(正则表达式),对匹配后的内容进行修改(替换,删除,打印,保存等等)
用法:
sell [OPTIONJ.. {script- only-if-no-other-script [input. fl]..
sed[参数]“sed自己独立的用法格式的语句”[文本文件]
常见选项:
-r 指定使用扩展的正则表达式
1、所有的都不要 2、
-n 拒绝默认显示
-e script
-f 指定脚本文件
-l 指定文本的换行长度
-i 直接修改文件内容(不建议使用)
地址定界方式:
1、直接匹配数值
sed -n '5p'filename
2、d-步长
sed -n '1,3p'filename
3、$指定行尾
sed -n '10,$p'filename
4、匹配正则表达式
sed -n '/k{5,}/,$p' filename
5、0,addr
addr可以为数字/$/正则表达式 sed -n '0,/k{5,}/p' filename
6、addr,+N
匹配addr行到addr后N行 sed -n '/fd/,+5p' filename
7、addr,~N
sed -n '1,~10p' filename
常见命令:
p print 打印(默认在屏幕显示文件文本内容)建议和-n一起使用;
c 替换行
sed "/aaa/c A" filename #将aaa替换w为A
d 删除
sed "/aaaa/d" filename
sed "1,3d" filename
n N 读取/添加 模式匹配到的行的下一行内容,再对其操作
w 保存文件内容到一个新的文件
sed "/pattern/w newfilename "oldfilename
sed "/k/w b" a
s 文本内容替换,默认替换模式空间匹配到的第一项
语法格式:s/pattern/字符串/
中间的/可以替换为任意一个特殊字符 例如: s### s@@@ s%%%
g 全部匹配
1 2 和正则表达式分组相同,实现反响引用;
指定某一个匹配项替换或修改
& 调用前面(PATTERN)的匹配的内容
w
p
拓展:
dirname --取出文件路径的路径部分
basename --取文件路径的文件名部分
sed高级应用
模式空间 -- hode space "占有空间"
h 把模式空间汇总的内容覆盖至保持空间中;
H 把模式空间中的内容追加到保持空间中;
g 从保持空间中取出内容至模式空间,覆盖至模式空间;
G 从保持空间取出数据(内容)追加至模式空间;
x 把模式空间和保持空间中的内容与保持空间中的内容进行互换操作
n 表示读取匹配到的行的下一行读取匹配到的行的下-行至模式空间
N 追加匹配到的行的下-行至模式空间
d 删除模式空间中的行
D 删除多行模式空间中的所有行
知识回顾
for for 变星 in 列表; do 循环体 done for((初始语句;判断语句;值变化语句)); do 循环体 done
case语句
case 分支 case 变量 in PAT1) 执行语句 ;; PAT2) 执行语句 ;; *) 默认执行语句 ;; esac
while语句
循环 格式: 定义初始值 while条件判断; do 循环体 值变化语句 done 其他两种特殊的语句格式: for i in $(cat tc/passwd &> /dev/null) 错误写法 while read 变量;do 循环体 done<</path/filename 死循环写法 while true;do 循环体 done
打断循环
break 跳出循环
continue 跳出本次循环
sleep 延长一定时间,继续向下执行命令
until
循环
与while用法相同
区别:只有判断条件为False的时候,才会进入循环;
if语句
if 条件判断;then 执行语句1 fi --------------- if 条件判断;then 执行语句1 else 执行语句2 fi --------------- if条件判断; then 执行语句1 elif条件判断; then 执行语句2 elif条件判断; then 执行语句3 else 执行语句4 fi