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移动文件


浙公网安备 33010602011771号