首页 > 其他分享 >sed练习

sed练习

时间:2024-02-16 23:11:19浏览次数:30  
标签:log 练习 yuchao sed 242 root class01

sed重点命令、语法

命令格式:
sed  [options]   [sed-commands]       [input-file]
sed   [选项]       [sed命令]          [输入文件]

选项:
-n 取消默认的sed输出,常与sed命令的p连用
-r 使用拓展正则
-i 将修改结果写入文件

命令:
p  输出处理过的行
a  append 追加
i  insert 插入
d  删除
;  命令分隔;执行多条命令

替换符-前面:
Ns 只替换第几行 如3s###
s  替换模式 s###
c  替换指定行的内容

标识符-后面:
g  全局替换
N  每行第几次匹配的对象
空 只匹配第一次内容
i  忽略大小写匹配

sed查找练习

测试数据

[242-yuchao-class01 root ~]#cat chaoge.log
My name is yuchao. you can call me yuchao.
I teach linux.
I like play computer game.
My qq is 877348180.
My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/
I love you.
I hate you,and thank u!
1.查找第2行
[242-yuchao-class01 root ~]#sed '2p' chaoge.log -n
I teach linux.


2.查询第2行到第3行
[242-yuchao-class01 root ~]#sed '2,3p' chaoge.log  -n
I teach linux.
I like play computer game.


3.按字包含game关键词的行
[242-yuchao-class01 root ~]#sed '/game/p' chaoge.log -n
I like play computer game.



4.查找以I开头的行
[242-yuchao-class01 root ~]#sed '/^I/p' chaoge.log  -n
I teach linux.
I like play computer game.
I love you.
I hate you,and thank u!


5.查找以.结尾的行
[242-yuchao-class01 root ~]#sed '/\.$/p' chaoge.log  -n
My name is yuchao. you can call me yuchao.
I teach linux.
I like play computer game.
My qq is 877348180.
I love you.



6.查找linux到qq中间所有的行
[242-yuchao-class01 root ~]#sed '/linux/,/qq/p' chaoge.log -n
I teach linux.
I like play computer game.
My qq is 877348180.


7.查找第3行到http关键词的行
[242-yuchao-class01 root ~]#sed '3,/http/p' chaoge.log -n
I like play computer game.
My qq is 877348180.
My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/


8.查找包含love或linux的行,需要用到扩展正则
[242-yuchao-class01 root ~]#sed -rn '/love|linux/p' chaoge.log -n
I teach linux.
I love you.

sed 增加练习


sed增加练习:
1.在第2行后面新添加一行      你是最棒的,奥力给!

[242-yuchao-class01 root ~]#sed '2a 你是最棒的,奥力给!' chaoge.log
My name is yuchao. you can call me yuchao.
I teach linux.
你是最棒的,奥力给!
I like play computer game.
My qq is 877348180.
My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/
I love you.
I hate you,and thank u!


2.在第2行前面新添加一行 你是最棒的,奥力给!
[242-yuchao-class01 root ~]#sed '2i 你是最棒的,奥力给!' chaoge.log
My name is yuchao. you can call me yuchao.
你是最棒的,奥力给!
I teach linux.
I like play computer game.
My qq is 877348180.
My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/
I love you.
I hate you,and thank u!




3.在第2行后面新添加两行文本 
你是最棒的,奥力给!
我帅过吴彦祖,富过李嘉诚!

方法1
[242-yuchao-class01 root ~]#sed '2a 你是最棒的,奥力给!\n我帅过吴彦祖,富过李嘉诚!' chaoge.log
My name is yuchao. you can call me yuchao.
I teach linux.
你是最棒的,奥力给!
我帅过吴彦祖,富过李嘉诚!
I like play computer game.
My qq is 877348180.
My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/
I love you.
I hate you,and thank u!

方法2
[242-yuchao-class01 root ~]#sed -e '2a 你是最棒的,奥力给!' -e '2a我帅过吴彦祖,富过李嘉诚!' chaoge.log
My name is yuchao. you can call me yuchao.
I teach linux.
你是最棒的,奥力给!
我帅过吴彦祖,富过李嘉诚!
I like play computer game.
My qq is 877348180.
My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/
I love you.
I hate you,and thank u!

方法3,不建议使用
[242-yuchao-class01 root ~]#sed '2a 你是最棒的,奥力给!' chaoge.log |sed '3a我帅过吴彦祖,富过李嘉诚!'
My name is yuchao. you can call me yuchao.
I teach linux.
你是最棒的,奥力给!
我帅过吴彦祖,富过李嘉诚!
I like play computer game.
My qq is 877348180.
My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/
I love you.
I hate you,and thank u!




4.在关键词http所在行前面添加一行  天下风云出我辈,一入江湖岁月催
[242-yuchao-class01 root ~]#sed '/http/i 天下风云出我辈,一入江湖岁月催' chaoge.log
My name is yuchao. you can call me yuchao.
I teach linux.
I like play computer game.
My qq is 877348180.
天下风云出我辈,一入江湖岁月催
My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/
I love you.
I hate you,and thank u!

sed替换练习

sed替换练习:

命令格式:
sed 's#替换关键词#替换后的内容#g' chaoge.log

测试数据

[242-yuchao-class01 root ~]#cat chaoge.log
My name is yuchao. you can call me yuchao.
I teach linux.
I like play computer game.
My qq is 877348180.
My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/
I love you.
I hate you,and thank u!

练习题

1.将yuchao替换为 老于
[242-yuchao-class01 root ~]#sed 's#yuchao#老于#g' chaoge.log
My name is 老于. you can call me 老于.
I teach linux.
I like play computer game.
My qq is 877348180.
My website is http://www.老于it.cn , and another website is https://www.老于.top/
I love you.
I hate you,and thank u!



2.将所有的'I'替换为'我'
[242-yuchao-class01 root ~]#sed 's#I#我#g' chaoge.log
My name is yuchao. you can call me yuchao.
我 teach linux.
我 like play computer game.
My qq is 877348180.
My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/
我 love you.
我 hate you,and thank u!

3.只将第一次匹配上的a替换为A
[242-yuchao-class01 root ~]#sed 's#a#A#' chaoge.log
My nAme is yuchao. you can call me yuchao.
I teAch linux.
I like plAy computer game.
My qq is 877348180.
My website is http://www.yuchAoit.cn , and another website is https://www.yuchao.top/
I love you.
I hAte you,and thank u!




4.只将第二次匹配上的a替换为A
[242-yuchao-class01 root ~]#sed 's#a#A#2' chaoge.log
My name is yuchAo. you can call me yuchao.
I teach linux.
I like play computer gAme.
My qq is 877348180.
My website is http://www.yuchaoit.cn , And another website is https://www.yuchao.top/
I love you.
I hate you,And thank u!





5.忽略大小写替换 将my和替换为We
[242-yuchao-class01 root ~]#sed 's#my#We#ig' chaoge.log
We name is yuchao. you can call me yuchao.
I teach linux.
I like play computer game.
We qq is 877348180.
We website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/
I love you.
I hate you,and thank u!



6.将第1行文本替换为 "当狂风在你耳边呼啸时,你只当它微风拂面;当暴雨在你眼前倾泻时,你只当它屋檐滴水."

方法1,正则
[242-yuchao-class01 root ~]#sed  '1 s#^.*#当狂风在你耳边呼啸时,你只当它微风拂面;当暴雨在你眼前倾泻时,你只当它屋檐滴水.#' chaoge.log
当狂风在你耳边呼啸时,你只当它微风拂面;当暴雨在你眼前倾泻时,你只当它屋檐滴水.
I teach linux.
I like play computer game.
My qq is 877348180.
My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/
I love you.
I hate you,and thank u!

方法2,固定字符串替换
[242-yuchao-class01 root ~]#sed 's#My name is yuchao. you can call me yuchao.#当狂风在你耳边呼啸时,你只当它微风拂面;当暴雨在你眼前倾泻时,你只当它屋檐滴水.#' chaoge.log
当狂风在你耳边呼啸时,你只当它微风拂面;当暴雨在你眼前倾泻时,你只当它屋檐滴水.
I teach linux.
I like play computer game.
My qq is 877348180.
My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/
I love you.
I hate you,and thank u!

方法3,sed的c命令,把选定的行改为新的文本
[242-yuchao-class01 root ~]#sed '1c 当狂风在你耳边呼啸时,你只当它微风拂面;当暴雨在你眼前倾泻时,你只当它屋檐滴水.' chaoge.log
当狂风在你耳边呼啸时,你只当它微风拂面;当暴雨在你眼前倾泻时,你只当它屋檐滴水.
I teach linux.
I like play computer game.
My qq is 877348180.
My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/
I love you.
I hate you,and thank u!

sed删除练习

测试数据

[242-yuchao-class01 root ~]#cat chaoge.log
My name is yuchao. you can call me yuchao.
I teach linux.
I like play computer game.
My qq is 877348180.
My website is http://www.yuchaoit.cn
and another website is https://www.yuchao.top/
I love you.
I hate you,and thank u!

练习题


sed删除练习:
1.删除第2行的内容
[242-yuchao-class01 root ~]#sed '2d' chaoge.log

2.删除第2和第5行
[242-yuchao-class01 root ~]#sed '2d;5d' chaoge.log


3.删除第2行到第4行
[242-yuchao-class01 root ~]#sed '2,4d' chaoge.log


4.隔行删除 1~2,表示删除从第一行开始,隔一行删一行,步长为2
[242-yuchao-class01 root ~]#sed '1~2d' chaoge.log


5.删除指定字符串game行之后的2行 
[242-yuchao-class01 root ~]#sed '/game/,+2d' chaoge.log

6.取反删除 只保留第1和第2行
[242-yuchao-class01 root ~]#sed '1,2!d' chaoge.log


7.删除包含关键词yuchao的行
[242-yuchao-class01 root ~]#sed '/yuchao/d' chaoge.log

8.删除存在网址的行,如http[s]://www.xxx.com
[242-yuchao-class01 root ~]#sed '/http.*www.*/d' chaoge.log

生产实践题(尽可能多的写出解决答案)

1.sed提取IP地址

测试数据

[242-yuchao-class01 root ~]#ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.242  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::eece:1c38:2b1b:43d3  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:65:27:85  txqueuelen 1000  (Ethernet)
        RX packets 29518  bytes 12461538 (11.8 MiB)
        RX errors 0  dropped 323  overruns 0  frame 0
        TX packets 4235  bytes 581950 (568.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

分组提取法


[242-yuchao-class01 root ~]#ifconfig ens33 | sed -rn '2s#.*net\s(.*)\snet.*$#\1#gp'

[242-yuchao-class01 root ~]#ifconfig ens33 | sed -rn '2s#^.*t (.*) net.*#\1#gp'


[242-yuchao-class01 root ~]#ifconfig ens33 | sed -rn '2s#inet (.*)net.*#\1#gp'

[242-yuchao-class01 root ~]#ifconfig ens33| sed -rn '2s#(.*net)\s(.*)\s(net.*)#\2#gp'

[242-yuchao-class01 root ~]#ifconfig ens33| sed -rn '2s#(^.*net)\s(.*)\s(n.*$)#\2#gp'

[242-yuchao-class01 root ~]#ifconfig ens33| sed -rn '2s#(.*t)(.*)(n.*)#\2#gp'

去头去尾法
去掉ip前后的内容

[242-yuchao-class01 root ~]#ifconfig ens33 | sed -rn -e '2s#.*inet##' -e '2s#n.*##p'

彻底去掉空格
[242-yuchao-class01 root ~]#ifconfig ens33 | sed -rn -e '2s#.*inet\s##' -e '2s#n.*##p'

2.修改dns配置文件(尽可能多的办法)

s命令替换法

正则替换法
[242-yuchao-class01 root ~]#sed -r 's#nameserver(.*)#nameserver 223.5.5.5#g' /etc/resolv.conf
# Generated by NetworkManager
nameserver 223.5.5.5


固定字符替换法
[242-yuchao-class01 root ~]#sed '/nameserver/s#114.114.114.114#223.5.5.5#' /etc/resolv.conf
# Generated by NetworkManager
nameserver 223.5.5.5

c命令字符替换法

[242-yuchao-class01 root ~]#sed -r '/name/c nameserver 223.6.6.6' /etc/resolv.conf
# Generated by NetworkManager
nameserver 223.6.6.6

3.修改nginx配置文件

运行用户改为www

默认的nginx运行用户
[242-yuchao-class01 root ~]#grep -i '^user' /etc/nginx/nginx.conf
user nginx;

修改为www
创建用户
[242-yuchao-class01 root ~]#useradd www -s /sbin/nologin -M
修改配置文件
[242-yuchao-class01 root ~]#sed -i  '/^user/s#user.*#user www;#' /etc/nginx/nginx.conf
启动nginx,查看进程

[242-yuchao-class01 root ~]#ps -ef|grep nginx |grep -v 'grep'
root       1917      1  0 17:15 ?        00:00:00 nginx: master process nginx
www        1918   1917  0 17:15 ?        00:00:00 nginx: worker process
www        1919   1917  0 17:15 ?        00:00:00 nginx: worker process

4.提取系统中所有用户名

每一个字段的正则
.*:.*:.*:.*:.*:.*:(.*)

你可以用如下办法去验证,提取每一个字段的数据

提取登录解释器
[242-yuchao-class01 root ~]#sed -r 's#.*:.*:.*:.*:.*:.*:(.*)#\1#g' /etc/passwd

提取用户名
[242-yuchao-class01 root ~]#sed -r 's#(.*):.*:.*:.*:.*:.*:.*#\1#g' /etc/passwd

先分析/etc/passwd文件的规律,然后根据规律写出提取数据的正则表达式

如该文件以冒号分割

[242-yuchao-class01 root ~]#sed 's#:.*##p' /etc/passwd -n

[242-yuchao-class01 root ~]#sed 's#:x.*##p' /etc/passwd -n

[242-yuchao-class01 root ~]#sed 's#:x:.*##p' /etc/passwd -n

分组提取法

点可以匹配到除了换行以外任意内容
[242-yuchao-class01 root ~]#sed -rn 's#(.):.*#\1#p' /etc/passwd

使用.*的时候,注意考虑匹配字符的边界设定,如:x 这个边界
[242-yuchao-class01 root ~]#sed -rn 's#(.*):x.*#\1#p' /etc/passwd
[242-yuchao-class01 root ~]#sed -rn 's#(^.*):x.*#\1#p' /etc/passwd


匹配除了冒号以外的任意内容
[242-yuchao-class01 root ~]#sed -rn 's#(^[^:]+).*#\1#p' /etc/passwd

仅匹配数字字母法
[242-yuchao-class01 root ~]#sed -rn 's#(^[a-zA-Z0-9]+).*#\1#p' /etc/passwd
[242-yuchao-class01 root ~]#sed -rn 's#([a-zA-Z0-9]+).*#\1#p' /etc/passwd
[242-yuchao-class01 root ~]#sed -rn 's#([a-zA-Z0-9]+):.*#\1#p' /etc/passwd
[242-yuchao-class01 root ~]#sed -rn 's#([a-zA-Z0-9]+):x.*#\1#p' /etc/passwd

5.提取/etc/passwd信息

用户名
uid
gid
注意先分析规律

[242-yuchao-class01 root ~]#head -5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

分组提取法

sed -r 's#(.*):.*:(.*):(.*):.*:.*:.*#\1,\2,\3#p' /etc/passwd  -n
或者
sed -r  's#^(.*):.*:(.*):(.*):.*:.*:.*#\1:\2:\3#g' /etc/passwd


sed -r 's#(.*):x:([0-9]+):([0-9]+):.*#\1,\2,\3#g' /etc/passwd

sed -rn 's#([0-9a-zA-Z]+):.*:([0-9]+):([0-9]+):.*#\1:\2:\3#p' /etc/passwd

6.将/etc/passwd字段调换位置

第一列、最后一列、调换
1.逐步提取每个字段的值

拆解1,先提取出 两列的数据
[242-yuchao-class01 root ~]#sed -r 's#(.*):.*:.*:.*:.*:.*:(.*)#\2:\1#g' /etc/passwd

拆解2,补上中间的内容,搞一个大分组,搞定
[242-yuchao-class01 root ~]#sed -r 's#(.*):(.*:.*:.*:.*:.*):(.*)#\3:\2:\1#g' /etc/passwd

拆解3,答案可以再精简,注意边界,如果实在不理解,就用拆解2的语法

sed -r 's#(.*):(x:.*):(.*)#\3:\2:\1#g' /etc/passwd

2.排除冒号提取
只不过是第一个关于用户名的提取方法变了

[242-yuchao-class01 root ~]#sed -r 's#(^[^:]+):(.*):(.*)#\3:\2:\1#g' /etc/passwd

3.字符范围提取

[242-yuchao-class01 root ~]#sed -r 's#(^[a-zA-Z0-9]+):(x.*):(.*)#\3:\2:\1#g' /etc/passwd

7. 批量修改文件名后缀

源数据

[242-yuchao-class01 root ~]#ll
total 0
-rw-r--r-- 1 root root 0 Apr 10 18:47 1.log
-rw-r--r-- 1 root root 0 Apr 10 18:47 2.log
-rw-r--r-- 1 root root 0 Apr 10 18:47 3.log
-rw-r--r-- 1 root root 0 Apr 10 18:47 4.log
-rw-r--r-- 1 root root 0 Apr 10 18:47 5.log

分组提取文件名,构造新文件名,交给bash解释器执行

1.其实等于是先构造shell语句
[242-yuchao-class01 root ~]#ls | sed -rn 's#(.*).log#mv \1.log \1.txt#p'
mv 1.log 1.txt
mv 2.log 2.txt
mv 3.log 3.txt
mv 4.log 4.txt
mv 5.log 5.txt

2.交给bash执行这样的shell语句
[242-yuchao-class01 root ~]#ls | sed -rn 's#(.*).log#mv \1.log \1.txt#p' | bash
[242-yuchao-class01 root ~]#ls
1.txt  2.txt  3.txt  4.txt  5.txt

8.修改文件内容,且备份文件

修改nginx端口,且做好备份

操作
[242-yuchao-class01 root ~]#sed -i.ori  -r 's#listen\s+80;#listen 24444;#g' /etc/nginx/nginx.conf
[242-yuchao-class01 root ~]#

检查
[242-yuchao-class01 root ~]#ls /etc/nginx/nginx.conf*
/etc/nginx/nginx.conf  /etc/nginx/nginx.conf.default  /etc/nginx/nginx.conf.ori

[242-yuchao-class01 root ~]#grep   '24444' /etc/nginx/nginx.conf
        listen 24444;

[242-yuchao-class01 root ~]#nginx
[242-yuchao-class01 root ~]#netstat -tnlp|grep nginx
tcp        0      0 0.0.0.0:24444           0.0.0.0:*               LISTEN      2165/nginx: master

9.提取nginx日志里的ip

测试数据

149.255.246.18 - - [10/Apr/2022:19:11:41 +0800] "GET / HTTP/1.1" 200 177 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.7 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.7" "-"
111.30.182.95 - - [10/Apr/2022:19:12:19 +0800] "GET / HTTP/1.1" 200 177 "-" "DNSPod-Monitor/2.0" "-"
104.192.3.54 - - [10/Apr/2022:19:13:11 +0800] "GET /index.php?option=com_javoice&view=../../../../../../../../../../../../../../../etc/passwd%00 HTTP/1.1" 404 3650 "-" "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "-"
101.89.45.22 - - [10/Apr/2022:19:13:52 +0800] "GET / HTTP/1.1" 200 177 "-" "DNSPod-Monitor/2.0" "-"
104.192.3.54 - - [10/Apr/2022:19:15:05 +0800] "GET /duomiphp/ajax.php?action=addfav&id=1&uid=1%20and%20extractvalue(1,concat_ws(1,1,md5(9999999999))) HTTP/1.1" 404 3650 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2919.83 Safari/537.36" "-"
61.241.55.180 - - [10/Apr/2022:19:15:24 +0800] "GET / HTTP/1.1" 200 177 "-" "DNSPod-Monitor/2.0" "-"
111.30.182.61 - - [10/Apr/2022:19:18:20 +0800] "GET / HTTP/1.1" 200 177 "-" "DNSPod-Monitor/2.0" "-"
101.89.45.22 - - [10/Apr/2022:19:19:52 +0800] "GET / HTTP/1.1" 200 177 "-" "DNSPod-Monitor/2.0" "-"
104.192.3.54 - - [10/Apr/2022:19:20:18 +0800] "POST /v2/query HTTP/1.1" 404 3650 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36" "-"
61.241.55.230 - - [10/Apr/2022:19:21:24 +0800] "GET / HTTP/1.1" 200 177 "-" "DNSPod-Monitor/2.0" "-"
104.192.3.54 - - [10/Apr/2022:19:22:32 +0800] "POST /mifs/j_spring_security_check HTTP/1.1" 404 3650 "http://123.206.16.61/mifs/user/login.jsp" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36" "-"
111.30.182.61 - - [10/Apr/2022:19:24:19 +0800] "GET / HTTP/1.1" 200 177 "-" "DNSPod-Monitor/2.0" "-"
104.192.3.54 - admin [10/Apr/2022:19:24:19 +0800] "POST /boafrm/formSysCmd HTTP/1.1" 404 3650 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36" "-"
104.192.3.54 - - [10/Apr/2022:19:25:02 +0800] "GET /wp-content/plugins/cherry-plugin/admin/import-export/download-content.php?file=../../../../../wp-config.php HTTP/1.1" 404 3650 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36" "-"
101.89.45.22 - - [10/Apr/2022:19:25:51 +0800] "GET / HTTP/1.1" 200 177 "-" "DNSPod-Monitor/2.0" "-"
104.192.3.54 - - [10/Apr/2022:19:26:29 +0800] "GET /maint/modules/endpointcfg/endpointcfg.php?lang=../../../../../../../../etc/passwd%00 HTTP/1.1" 404 3650 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36" "-"
61.241.55.180 - - [10/Apr/2022:19:27:23 +0800] "GET / HTTP/1.1" 200 177 "-" "DNSPod-Monitor/2.0" "-"

实践

大部分的日志,可以用如下正则提取ip
[root@yuchao-tx-server ~]# sed -r 's#(.*)\s-\s-.*#\1#g' /var/log/nginx/access.log | sort -n | uniq

但是更严谨的写法如下,直接删掉短横线后续所有内容
[root@yuchao-tx-server ~]# sed -r 's#(-\s.*)##g' /var/log/nginx/access.log

10.sed总结

解决办法的正则不唯一,可以多次尝试,找出最完美,精确的正则
熟能生巧,正则不是一两天就能搞明白的
关于sed的命令要慎重
如-n 和p一般结合用
-i 和 p禁止一起用
关于sed的s替换模式,间隔符,请使用#号更靠谱,其他的容易有歧义
以及注意是否添加g全局修改
是否添加-i参数,修改源文件

s#old_string#new_string#g

s/old_string/new_string/g

s@old_string@new_string@g

标签:log,练习,yuchao,sed,242,root,class01
From: https://www.cnblogs.com/btcm409181423/p/18017619

相关文章

  • 三剑客—sed
    关于linux三剑客grep,过滤关键字信息数据。主要是用于查文本内的数据sed,对文本数据进行编辑,修改原文件内容awk,对文件数据过滤,提取,并且能实现,格式化输出awk对文件数据处理后,还能更美观的展示数据sed是什么sed软件本身sed提供的加工的命令给sed提供的源数据sed语法......
  • Go语言指南练习:Stringer
    题目:通过让IPAddr类型实现fmt.Stringer来打印点号分隔的地址。例如,IPAddr{1,2,3,4}应当打印为"1.2.3.4"。packagemainimport"fmt"typeIPAddr[4]byte//TODO:给IPAddr添加一个"String()string"方法func(aIPAddr)String()string{returnfmt.Spr......
  • matlab练习程序(Schur补)
    Schur补是一种矩阵分解方法,通过将一个大的矩阵分解为几个较小的矩阵来简化计算,通常能够提高矩阵求逆的速度。对于形如下面的矩阵:可以把矩阵划分为左上、右上、左下、右下四个分块矩阵。得到矩阵:根据A和D的奇异性,可以分两种情况。如果A可逆,则有:如果D可逆,则有:公式两边同......
  • Go学习指南练习:映射
    题目:实现WordCount。它应当返回一个映射,其中包含字符串s中每个“单词”的个数。函数wc.Test会对此函数执行一系列测试用例,并输出成功还是失败。你会发现strings.Fields很有帮助。packagemainimport("golang.org/x/tour/wc""strings")funcWordCount(sstr......
  • 《SagDRE: Sequence-Aware Graph-Based Document-Level Relation Extraction with Ada
    代码原文地址关键参考文献:Document-LevelRelationExtractionwithAdaptiveThresholdingand LocalizedContextPooling摘要关系抽取(RE)是许多自然语言处理应用的重要任务,它的目标是从文档中抽取出实体之间的关系。文档级RE任务面临着许多挑战,因为它不仅需要跨句子......
  • Go语言指南练习:切片
    题目:实现Pic。它应当返回一个长度为dy的切片,其中每个元素是一个长度为dx,元素类型为uint8的切片。当你运行此程序时,它会将每个整数解释为灰度值(好吧,其实是蓝度值)并显示它所对应的图像。图像的选择由你来定。几个有趣的函数包括(x+y)/2,x*y,x^y,x*log(y)和x%(y+1)。(提示:需要......
  • For循环练习
    publicclassFor02{publicstaticvoidmain(String[]args){//计算0到100之间的奇数和、偶数和intoddSum=0;intevenSum=0;for(inti=0;i<=100;i++){if(i%2!=0){//奇数oddSum+=i;//o......
  • Debug: tf-distribute-strategy-worker: json.decoder.JSONDecodeError: Expecting pr
    [ERROR:json.decoder.JSONDecodeError:Expectingpropertynameenclosedindoublequotes:line1column182]#infilepipeline.yaml-name:TF_CONFIGvalue:"{\"cluster\":{\"worker\":[\"dist-s......
  • day29_三剑客sed
    关于学正则单个正则字符还认识组合到一起就晕了,怎么办?本质还是对单个字符没理解.认识*认识.*组合到就一起就蒙了,为什么?还是没想明白.的意义,*的意义正则表达式,从左向右,逐步理解单个字符的意义怎么做?1.思维脑图写没写?2.每一个正则表达式的符号,自己有没有动手......
  • day06_文件管理操作练习
    作业解析关于[email protected]关于登录,退出登录1.登录的概念的第一种形式1.比如你登录系统[email protected]#退出该会话登录exit#退出登录2.第二种登录,如用于切换,root>yuchao01验证该用户是否存在系......