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_-]\+\):x:\([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移动文件