liunx—sed命令
liunx 三剑客之 sed 命令
常用于
处理文本文件
分析日志文件
修改配置文件
sed(默认不修改原文件)
原则:
1、一次处理一行内容
2、不改变文件内容
3、sed 可以对所有进行操作,也可以根据正则选择定行
格式:
命令行模式:
sed[options] 'command' file
可选项 命令 要处理 file
options:-e ,-n, -i
command: 行定位(正则)+sed 命令操作(两部 分)
行定位
sed 'p' passwd // 默认输出两行内容
sed -n '-p' passwd //-n: 忽略默认输出
nl passwd //显示行号
nl -b a passwd //空白行添加行号
nl -b a passwd|sed -n '9p' //添加行号,输出第九行
sed -n '/cwl/p' passwd //打印指定字符
nl -b a passwd|sed -n '6,10p' // 打印指定的行数 6-9 行
nl -b a passwd|sed -n '/news/,/list/p' //指定 news 到 list 范围打印
nl -b a passwd|sed -n '10,/list/p' //混合使用,指定 10 行到 list 范围内容
nl -b a passwd|sed -n '2,36!p' //不显示指定内容!
nl -b a passwd|sed -n '10~2' //开始位置 ~ 间隔几个打印(类似 python 步长)
新增 参数 a 末尾追加
nl -b a passwd|sed '1a========' //指定第 1 行新增 ===== 在末尾
插入 参数 i 开始添加
nl -b a passwd|sed '1i========' //指定第 1 行新增 ===== 在开始位置
nl -b a passwd|sed '1,5i========' //多行插入
代替 参数 c
nl -b a passwd|sed '2,5c========' //多行替代
删除 参数 d
nl -b a passwd|sed '2d' //删除
sed '/^$/d' profile123 //在正则中 ^$ 开始挨着结尾代表空白行
修改文件 参数 -i
sed -i '$a 12345cwl' profile123 //修改文件(默认追加模式)
sed -i '$a \ 234cwl\n 456cwl' //第一个 \ 是用来添加空格的,第二个 \n 用来换行的
重定向修改 >> 追加 > 覆盖
sed -n '$a -n tian jia chong ding xiang' profile123>>profile123 //sed -n 追加不会添加之前内容
替换
默认替换第一个指定元素
sed 's/nologin/login/' passwd //全部替换为 login
替换全部指定元素 参数 g
小练习取出 ip 地址
ifconfig | sed -n '/inet /p' | sed 's/inet //' | sed 's/ netmask.*//' //第一个管道是取 inet 这一行行, //第二个管道是 s 替换前面 //第三个管道是替换后面 //* 号代表所有 \s\ 代表一个空格 \s\+ 代表多个空格
空格应用
ifconfig | sed -n '/inet /p' | sed 's/inet //' | sed 's/\s\+netmask.*//'
; 多行命令同时执行 也可以把;替换成 -e
nl passwd | sed '{5,35d;s/:/@/g}' //删除 3,35 行,并且把:替换为 @全部替换
sed 's/[a-z_-]\+/& /' passwd // & 相当于变量前面匹配什么它就代表什么
\U \L: 对一串字符转大写小写 \u \l: 对首字母转大写或小写
sed 's/[a-z_-]\+/\u& /' passwd //[a-z_-]\+ 取 key 首字母, 替换大写
cat 123.txt | sed 's/c1\(l2\)\(w3\)/\1\2/' //\ 代表转义 \(\)
ifconfig | sed -n '/inet.*net/p' //查包含 iner 和 net 关键字的一行
sed 's/\([a-z_-]\+\)❌\([0-9]\+\):\([0-9]\+\):.*/\1,\2,\3/' passwd | sed -n '1,5p' //多多理解
sed-rw
读 1r 1 是行数
复制 abc 第一行写入到 123 里面
写 1w
-q 退出(执行到第 N 行退出)
正则表达式:
在正则表达式中 ^ 代表开始 (^[^0-9][0-9]$ 代表开始字符是非数字如:-1,d7 等) 当在一组方括号里使用 ^ 时,它表示 "非"或"排除" 的意思,常常用来剔除某个字符
$ 代表结束
. 代表任意字符
* 代表 0 个以上
\ 代表转义
[a-z] //匹配所有的小写字母 [A-Z] //匹配所有的大写字母 [a-zA-Z] //匹配所有的字母 [0-9] //匹配所有的数字 [0-9\.\-] //匹配所有的数字,句号和减号 [\f\r\t\n] //匹配所有的白字符
[^a-z] //除了小写字母以外的所有字符 [^\\\/\^] //除了 (\)(/)(^) 之外的所有字符 [^\"\'] // 除了双引号 (") 和单引号 (') 之外的所有字符
详情:https://www.cnblogs.com/zery/p/3438845.html
https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215?fr=aladdin
脚本模式:
sed -f scriptfile file
cat 查看文件
clear 清屏
mkdir 建文件夹
cp 复制文件 可跟文件名,可跟路径
rm 删除
mv 移动文件