Linux文本三剑客(1)

文章目录

  • 一、通配符
  • 二、find文件查找
    • 查找条件
    • 处理动作
  • 三、正则表达式
  • 四、Linux三剑客之grep
    • 实例
    • 正则表达式(基于grep)
      • 基础正则表达式
      • 扩展正则
    • 最常用
  • 五、Linux三剑客之sed
    • 语法
    • 动作说明
    • 实例
      • 以行为单位的新增/删除
      • 以行为单位的替换与显示
      • 数据的搜寻并显示
      • 数据的搜寻并删除
      • 数据的搜寻并执行命令
      • 数据的搜寻并替换
      • 多点编辑
      • 直接修改文件内容(危险动作)

一、通配符

通配符是shell在做PathnameExpansion时用到的。说白了一般只用于文件名匹配,它是由shell解析的,比如 find,ls,cp,mv等 shell常见通配符

*:匹配0或多个字符
?:匹配任意一个字符
[list]:匹配list中任意单个字符
[c1‐c2]:匹配c1‐c2中任意单个字符
[^c1‐c2]/[!c1‐c2]:不匹配c1‐c2中任意字符
{string1,string2,...}:匹配{}中任意单个字符串
  • shell 元字符
IFS<tab>/<space>/<enter>
CR:<enter>
=:设定变量
$:取变量值
>/< :重定向
|:管道
&:后台执行命令
():在子shell中执行命令/运算或命令替换
{}:函数中执行/变量替换的界定范围
;:命令结束后,忽略其返回值,继续执行下一个命令
&&:命令结束后,若为true,继续执行下一个命令
||:命令结束后,若为false,继续执行下一个命令
!:非
#:注释
\:转义符
  • shell转义符
'':硬转义,内部所有shell元字符,通配符都会被关掉
"":软转义,内部

二、find文件查找

  • 实时查找工具,通过遍历指定路径下的文件系统完成文件查找
  • 工作特点
    • 查找速度略慢
    • 精确查找
    • 实时查找
    • 可以满足多种条件匹配
find [选项] [路径] [查找条件 + 处理动作]
查找路径:指定具体目录路径,默认是当前文件夹
查找条件:指定的查找标准(文件名/大小/类型/权限等),默认是找出所有文件
处理动作:对符合条件的文件做什么操作,默认输出屏幕

查找条件

  • 查找条件
根据文件名查找:‐name "filename" 支持global‐iname "filename" 忽略大小写‐regex "PATTERN" 以Pattern匹配整个文件路径字符串,而不仅仅是文件名称
根据属主和属组查找:‐user USERNAME:查找属主为指定用户的文件‐group GROUPNAME:查找属组为指定属组的文件‐uid UserID:查找属主为指定的ID号的文件‐gid GroupID:查找属组为指定的GID号的文件‐nouser:查找没有属主的文件‐nogroup:查找没有属组的文件
根据文件类型查找:‐type Type:f/d/l/s/b/c/p
根据文件大小来查找:‐size [+|]N[bcwkMG]
根据时间戳:天:‐atime [+|]N‐mtime‐ctime分钟:‐amin N‐cmin N‐mmin N
根据权限查找:‐perm [+|]MODEMODE:精确权限匹配/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可‐MODE:每一类对象都必须同时拥有为其指定的权限标准
组合条件:与:‐a或:‐o非:‐not
相关案例:找出/tmp目录下,属主不是root,且文件名不是fstab的文件:
find /tmp \( -not -user root -a -not -name fstab \) -ls
  • 根据文件名查找
[root@localhost ~]# find /etc -name "ifcfg-ens33"
[root@localhost ~]# find /etc -iname "ifcfg-ens33" # 忽略大小写
[root@localhost ~]# find /etc -iname "ifcfg*"
  • 按文件大小
[root@localhost ~]# find /etc -size +5M # 大于5M
[root@localhost ~]# find /etc -size 5M # 等于5M
[root@localhost ~]# find /etc -size -5M # 小于5M
[root@localhost ~]# find /etc -size +5M -ls # 找到的处理动作-ls
  • 指定查找的目录深度
[root@localhost ~]# find / -maxdepth 3 -a -name "ifcfg-ens33" # 最大查找深度
# -a是同时满足,-o是或
[root@localhost ~]# find / -mindepth 3 -a -name "ifcfg-ens33" # 最小查找深度
  • 按时间找
[root@localhost ~]# find /etc -mtime +5 # 修改时间超过5天
[root@localhost ~]# find /etc -mtime 5 # 修改时间等于5天
[root@localhost ~]# find /etc -mtime -5 # 修改时间5天以内
  • 按照文件属主、属组找
[root@localhost ~]# find /home -user xwz # 属主是xwz的文件
[root@localhost ~]# find /home -group xwz
[root@localhost ~]# find /home -user xwz -group xwz
[root@localhost ~]# find /home -user xwz -a -group root
[root@localhost ~]# find /home -user xwz -o -group root
[root@localhost ~]# find /home -nouser # 没有属主的文件
[root@localhost ~]# find /home -nogroup # 没有属组的文件
  • 按文件类型
[root@localhost ~]# find /dev -type d
  • 按文件权限
[root@localhost ~]# find / -perm 644 -ls
[root@localhost ~]# find / -perm -644 -ls # 权限小于644的
[root@localhost ~]# find / -perm 4000 -ls
[root@localhost ~]# find / -perm -4000 -ls
  • 按正则表达式
[root@localhost ~]# find /etc -regex '.*ifcfg-ens[0-9][0-9]'
# .* 任意多个字符
# [0-9] 任意一个数字
  • 条件组合
-a:多个条件and并列
-o:多个条件or并列
-not:条件取反

处理动作

‐print:默认的处理动作,显示至屏幕
‐ls:类型于对查找到的文件执行“ls ‐l”命令
‐delete:删除查找到的文件
‐fls /path/to/somefile:查找到的所有文件的长格式信息保存至指定文件中
‐ok COMMAND {}\:对查找到的每个文件执行由COMMAND指定的命令
对于每个文件执行命令之前,都会交换式要求用户确认
‐exec COMMAND {} \:对查找到的每个文件执行由COMMAND指定的命令
[root@server1 ~]# find /etc/init.d/ -perm -111 -exec cp -r {} dir1/ \;
{}:用于引用查找到的文件名称自身
注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令;另一种方式可规避此问题
find | xargs COMMAND

三、正则表达式

正则表达式是用来匹配字符串的,针对文件内容的文本过滤工具里,大都用到正则表达式,如vi,grep,awk, sed等

##字符匹配.:匹配任意单个字符[]:匹配指定范围内任意单个字符 [a-z] [0-9][^]:匹配指定范围外任意单个字符 [^a-z] [^0-9][:alnum:]:字母与数字字符[:alpha:]:字母[:ascii:]:ASCII字符[:blank:]:空格或制表符[:cntrl:]:ASCII控制字符[:digit:]:数字[:graph:]:非控制、非空格字符[:lower:]:小写字母[:print:]:可打印字符[:punct:]:标点符号字符[:space:]:空白字符,包括垂直制表符[:upper:]:大写字母[:xdigit:]:十六进制数字
##匹配次数*:匹配前面的字符任意次数.*:匹配任意长度的字符\?:匹配其前面字符0或1次,即前面的可有可无 'a\?b'\+:匹配其前面的字符至少1次 'a\+b'\{m\}:匹配前面的字符m次\{m,n\}:匹配前面的字符至少m次,至多n次\{0,n\}:匹配前面的字符至多n次\{m,\}:匹配前面的字符至少m次
##位置锚定^:行首锚定,用于模式的最左侧$:行末锚定,用于模式的最右侧^PATTERN$:用于模式匹配整行;^$:空行\<\b:词首锚定,用于单词模式的左侧\>\b:词尾锚定,用于单词模式的右侧\<PATTERN\>:匹配整个单词 '\<hello\>'
##分组\(\):将一个或多个字符捆绑在一起;当作一个字符\(xy\)*abNote:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命令方式为:\1\2\3……\1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;  \(ab\+\(xy\)*\):\1:ab\+\(xy\)*\2:xy
  • 扩展正则表达式
##字符匹配
.
[]
[^]
##次数匹配
*
?:0次或1次
+:1次或多次
{m}:匹配m次
{m,n}:至少m次,至多n次
##位置锚定
##分组
()
##或者
a|b
C | cat :C或cat
(C|c)at : C或c

四、Linux三剑客之grep

grep作用:过滤文本内容

选项描述
-E :–extended–regexp模式是扩展正则表达式(ERE)
-i :–ignore–case忽略大小写
-n: --line–number打印行号
-o:–only–matching只打印匹配的内容
-c:–count只打印每个文件匹配的行数
-B:–before–context=NUM打印匹配的前几行
-A:–after–context=NUM打印匹配的后几行
-C:–context=NUM打印匹配的前后几行
–color[=WHEN]匹配的字体颜色,别名已定义了
-v:–invert–match打印不匹配的行
-e多点操作eg:grep -e “^s” -e “s$”

样本文件内容

[root@localhost ~]# cat test
asdkahsduoa
aslkdsl
oiofr
sdjo
A
F
aSDD
CASDCasdo
ca

实例

实例1:打印出所有的a无论大小写 : -i选项

[root@localhost ~]# grep -i "a" test
asdkahsduoa
aslkdsl
A
aSDD
CASDC
asdo
ca

实例2:打印出所有的a无论大小写,并且显示该字符串所在的行 : -n选项

[root@localhost ~]# grep -in "a" test
1:asdkahsduoa
2:aslkdsl
5:A
7:aSDD
8:CASDC
10:asdo
11:ca

实例3:仅仅打印出所有匹配的字符串: -o选项

[root@localhost ~]# grep -io "a" test
a
a
a
a
A
a
A
a
a

实例4:打印出匹配的字符串有多少行 -c选项

[root@localhost ~]# grep -ic "a" test
7

实例5:打印出字符S前面的2行 -B

[root@localhost ~]# grep -B 2 "S" test
A
F
aSDD
CASDC

实例6:打印出字符S后面的2行 -A

[root@localhost ~]# grep -A 2 "S" test
aSDD
CASDCasdo

实例7:打印出字符S前后2行 -C

[root@localhost ~]# grep -C 2 "S" test
A
F
aSDD
CASDCasdo

实例8:打印出不包含大小s的所有行 取反 -v

[root@localhost ~]# grep -iv "S" test
oiofr
A
Fca

grep可以从文件当中直接搜索某个关键词,也可以从标准输入里面搜索

[root@localhost ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# cat /etc/passwd | grep "root"
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

正则表达式(基于grep)

  • 功能就是用来检索、替换那些符合某个模式(规则)的文本,正则表达式在每种语言中都会有;
  • 正则表达式就是为了处理大量的文本或字符串而定义的一套规则和方法
  • 通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串
  • Linux正则表达式一般以行为单位处理

基础正则表达式

符号描述
.匹配任意单个字符(必须存在)
^匹配以某个字符开头的行
$配以什么字符结尾的行
*匹配前面的一个字符出现0次或者多次;eg:a*b
.*表示任意长度的任意字符
[]表示匹配括号内的一个字符
[^]匹配[^字符]之外的任意一个字符
[]匹配非[^字符]内字符开头的行
<锚定 单词首部;eg:<root
>锚定 单词尾部:eg:root>
{m,n}表示匹配前面的字符出现至少m次,至多n次
()表示对某个单词进行分组;\1表示第一个分组进行调用

扩展正则

  • egrep …
  • grep -E …
  • 扩展正则支持所有基础正则;并有补充
  • 扩展正则中{}和[]不用转义可以直接使用;
符号描述
+表示前面的字符至少出现1次的情况
|表示“或”
表示前面的字符至多出现1次的情况

最常用

查看配置文件时去除所有的注释和空行

[root@localhost ~]# grep -Ev "^#|^$" /etc/ssh/sshd_config

五、Linux三剑客之sed

Linux sed命令是利用script来处理文本文件。

sed可依照script的指令,来处理、编辑文本文件。

sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

语法

sed的命令格式: sed [option] 'sed command' filename
sed的脚本格式:sed [option] ‐f 'sed script' filename
常用选项:
‐n :只打印模式匹配的行
‐e :直接在命令行模式上进行sed动作编辑,此为默认选项
‐f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作
‐r :支持扩展表达式
‐i :直接修改文件内容
查询文本的方式
使用行号和行号范围
x:行号
x,y:从x行到y行
x,y!:x行到y行之外
/pattern:查询包含模式的行
/pattern/, /pattern/:查询包含两个模式的行
/pattern/,x:x行内查询包含模式的行
x,/pattern/:x行后查询匹配模式的行

动作说明

常用选项:
p:打印匹配的行(‐n)
=:显示文件行号
a\:指定行号后添加新文本
i\:指定行号前添加新文本
d:删除定位行
c\:用新文本替换定位文本
w filename:写文本到一个文件
r filename:从另一个文件读文本
s///:替换
替换标记:
g:行内全局替换
p:显示替换成功的行
w:将替换成功的结果保存至指定文件
q:第一个模式匹配后立即退出
{}:在定位行执行的命令组,用逗号分隔
g:将模式2粘贴到/pattern n/

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)

c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!

d :删除,因为是删除啊,所以 d 后面通常不接任何东西;

i :插入, i的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行

s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g就是啦!

实例

在testfile文件的第四行后添加一行,并将结果输出到标准输出

[root@localhost ~]# sed -e 4a\newline test
line one
line two
line three
line four
newline
line five
查看test文件没有生效加上-i会直接修改文件

以行为单位的新增/删除

将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除

[root@localhost ~]# nl /etc/passwd | sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin

sed 的动作为 ‘2,5d’ ,那个 d 就是删除!因为 2-5 行给他删除了,所以显示的数据就没有 2-5 行罗~ 另外,注意一下,原本应该是要下达 sed -e 才对,没有 -e 也行啦!同时也要注意的是, sed 后面接的动作,请务必以 ‘’ 两个单引号括住喔!

只要删除第 2 行

[root@localhost ~]# nl /etc/passwd | sed '2d'
1 root:x:0:0:root:/root:/bin/bash
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin

要删除第 3 到最后一行

[root@localhost ~]# nl /etc/passwd | sed '3,$d'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin

在第二行后(亦即是加在第三行)加上『hello world』字样

[root@localhost ~]# nl /etc/passwd | sed '2a\hello world'1 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologin
hello world3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown8 halt:x:7:0:halt:/sbin:/sbin/halt9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin10 operator:x:11:0:operator:/root:/sbin/nologin11 games:x:12:100:games:/usr/games:/sbin/nologin12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin13 nobody:x:99:99:Nobody:/:/sbin/nologin14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin15 dbus:x:81:81:System message bus:/:/sbin/nologin16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin

加在第二行前面

[root@localhost ~]# nl /etc/passwd | sed '2i\hello world'1 root:x:0:0:root:/root:/bin/bash
hello world2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown8 halt:x:7:0:halt:/sbin:/sbin/halt9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin10 operator:x:11:0:operator:/root:/sbin/nologin11 games:x:12:100:games:/usr/games:/sbin/nologin12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin13 nobody:x:99:99:Nobody:/:/sbin/nologin14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin15 dbus:x:81:81:System message bus:/:/sbin/nologin16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin

增加多行文字

[root@localhost ~]# nl /etc/passwd | sed '2a\hello world\
> nihao' # 单引号不写全
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
hello world
nihao
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin

以行为单位的替换与显示

将第2-5行的内容取代成为『No 2-5 number』

[root@localhost ~]# nl /etc/passwd | sed '2,5c\No 2-5 number'
1 root:x:0:0:root:/root:/bin/bash
No 2-5 number
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin

仅列出 /etc/passwd 文件内的第 5-7 行

[root@localhost ~]# nl /etc/passwd | sed -n '5,7p'
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

数据的搜寻并显示

搜索 /etc/passwd有root关键字的行

[root@localhost ~]# nl /etc/passwd | sed -n '/root/p'
1 root:x:0:0:root:/root:/bin/bash
10 operator:x:11:0:operator:/root:/sbin/nologin

数据的搜寻并删除

删除/etc/passwd所有包含root的行,其他行输出

[root@localhost ~]# nl /etc/passwd | sed '/root/d'
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin

数据的搜寻并执行命令

搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行

[root@localhost ~]# nl /etc/passwd | sed -n '/root/{s/bash/blueshell/p;q}'
1 root:x:0:0:root:/root:/bin/blueshell

最后的q是退出,不然会继续找下去

数据的搜寻并替换

除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代

sed 's/要被取代的字串/新的字串/g'

查询 IP

原始信息

[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.91.128 netmask 255.255.255.0 broadcast 192.168.91.255inet6 fe80::2de4:b37a:36e9:ae2e prefixlen 64 scopeid 0x20<link>ether 00:0c:29:d3:76:83 txqueuelen 1000 (Ethernet)RX packets 33461 bytes 32133707 (30.6 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 11322 bytes 1300148 (1.2 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (Local Loopback)RX packets 10 bytes 697 (697.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 10 bytes 697 (697.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

取有IP地址那一行

[root@localhost ~]# ifconfig | sed -n '/netmask/p'inet 192.168.91.128 netmask 255.255.255.0 broadcast 192.168.91.255inet 127.0.0.1 netmask 255.0.0.0

删除IP地址前面和后面的东西

[root@localhost ~]# ifconfig | sed -n '/netmask/p' | sed 's/^.*inet //g' |
sed 's/ netmask.*$//g'
192.168.91.128
127.0.0.1

取第一行

[root@localhost ~]# ifconfig | sed -n '/netmask/p' | sed 's/^.*inet //g' | sed 's/ netmask.*$//g' | sed -n '1p'
192.168.91.128

可以在末尾加g替换每一个匹配的关键字,否则只替换每行的第一个

另一种方式:

[root@localhost ~]# ip a|sed -n '/inet /p'|sed 's/^.*inet //g'|sed 's/\/.*$//g'|sed -n '2p'

多点编辑

一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell

[root@localhost ~]# nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'1 root:x:0:0:root:/root:/bin/blueshell2 bin:x:1:1:bin:/bin:/sbin/nologin

-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。

直接修改文件内容(危险动作)

[root@localhost ~]# cat test
line one.
line two.
line three.
line four.
line five.

加i参数就是直接修改

[root@localhost ~]# sed -i 's/\.$/\!/g' test
[root@localhost ~]# cat test
line one!
line two!
line three!
line four!
line five!

利用 sed 直接在最后一行加入 # test

[root@localhost ~]# sed -i '$a\# test' test
[root@localhost ~]# cat test
line one!
line two!
line three!
line four!
line five!
# test

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/678681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云原生容器化-3 Dockerfile

1.Dockerfile作用 用户可以使用两种方式构建Docker镜像: 手动方式和Dockerfile自动方式。 [1] 手动方式 运行基础镜像为容器后&#xff0c;根据业务需要进行定制化操作&#xff0c;然后手动通过docker commit命令将容器保存为镜像。 [2] Dockerfile 将依赖的基础镜像和定制化操…

CVE-2012-1823 漏洞复现

CVE-2012-1823 PHP SAPI 与运行模式 首先&#xff0c;介绍一下PHP的运行模式。 下载PHP源码&#xff0c;可以看到其中有个目录叫sapi。sapi在PHP中的作用&#xff0c;类似于一个消息的“传递者”&#xff0c;比如在《Fastcgi协议分析 && PHP-FPM未授权访问漏洞 &…

中年低端中产程序员从西安出发到海南三亚低成本吃喝万里行:西安-南宁-湛江-雷州-徐闻-博鳌-陵水-三亚-重庆-西安

文章大纲 旅途规划来回行程的确定南宁 - 北海 - 湛江轮渡成为了最终最大的不确定性&#xff01;感谢神州租车气温与游玩地点总体花费 游玩过程出发时间&#xff1a;Day1-1月25日星期四&#xff0c;西安飞南宁路途中&#xff1a;Day2-1月26日星期五&#xff0c;南宁-湛江-住雷州…

工业自动化监控界面与网页、移动UI大相径庭,不能机械照搬。

工业自动化系统监控界面与网页UI、移动UI设计的不同之处主要体现在以下几个方面&#xff1a; 设备和数据展示&#xff1a;工业自动化系统监控界面需要展示大量的设备状态和实时数据&#xff0c;如传感器数据、设备运行状态等。相比之下&#xff0c;网页UI和移动UI设计更注重内容…

【开源】JAVA+Vue.js实现衣物搭配系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 衣物档案模块2.2 衣物搭配模块2.3 衣物收藏模块 三、系统设计3.1 用例设计3.2 E-R图设计3.3 数据库设计3.3.1 衣物档案表3.3.2 衣物搭配表3.3.3 衣物收藏表 四、系统实现4.1 登录页4.2 衣物档案模块4.3 衣物搭配模块4.4…

(已解决)Vue routes的 children使用(小白来看,包会!)

前言 分析链接&#xff1a;Vueelement ui实现好看的个人中心_vue个人信息页面代码-CSDN博客 使用了很多vue深层知识&#xff0c;简化并且做到自己的项目上面 对小白很有帮助&#xff0c;因为我就是小白&#xff0c;才搞明白。 最核心的就是routes的 children使用&#xff0c…

leetCode 的第一题 javascript 两数之和

有人相爱&#xff0c;有人夜里开车看海&#xff0c;有人leetcode第一题都做不出来。 1.题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对…

C++入门(上)

文章目录 1:什么是C2.C的发展史3:C关键字(C98)4:命名空间4.1:命名空间的概念4.2:命名空间的定义4.3:命名空间的使用4.3.1加命名空间的名称以及域作用限定符4.3.2:使用using将命名空间中某个成员引入4.3.3:使用using namespace 命名空间名称展开命名空间代码1代码2 5:C输入与输出…

pytorch常用激活函数笔记

1. relu函数&#xff1a; 公式&#xff1a; 深层网络内部激活函数常用这个 import matplotlib.pyplot as pltdef relu_fun(x):if x>0:return xelse:return 0x np.random.randn(10) y np.arange(10)plt.plot(y,x)for i ,t in enumerate(x):x[i] relu_fun(t) plt.p…

JVM的主要组成部分,以及它们的作用。JVM中的内存区域有哪些,它们各自的作用是什么?什么是Java的堆内存,它如何影响程序的性能?

JVM的主要组成部分&#xff0c;以及它们的作用 JVM&#xff08;Java虚拟机&#xff09;的主要组成部分包括类加载器&#xff08;Class Loader&#xff09;、运行时数据区&#xff08;Runtime Data Area&#xff09;、执行引擎&#xff08;Execution Engine&#xff09;、本地库…

C#系列-C#实现秒杀功能(14)

在C#中实现商品秒杀功能&#xff0c;通常需要考虑并发控制、数据库事务、缓存策略、限流措施等多个方面。下面是一个简单的示例&#xff0c;演示了如何使用C#和数据库来实现一个基本的商品秒杀功能。 首先&#xff0c;假设你有一个商品表&#xff08;Product&#xff09;和一个…

《21天精通IPv4 to IPv6》第3天:IPv6地址配置——如何为不同的系统配置IPv6?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

2024 年 6 款最佳 PDF 编辑器,您可以免费获得

PDF 作为与 Windows、iOS、Linux 和各种其他操作系统兼容的安全文档格式而享有盛誉。这种广泛的兼容性使 PDF 成为一种流行的选择&#xff0c;几乎每个用户都会在不同的环境中遇到 PDF 文件。无论是合同、发票、电子书、信用卡对账单、银行对账单、税务表格还是保险文件&#x…

算法学习——LeetCode力扣字符串篇

算法学习——LeetCode力扣字符串篇 344. 反转字符串 344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; 描述 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地…

精读《js 模块化发展》

1 引言 如今&#xff0c;Javascript 模块化规范非常方便、自然&#xff0c;但这个新规范仅执行了 2 年&#xff0c;就在 4 年前&#xff0c;js 的模块化还停留在运行时支持&#xff0c;10 年前&#xff0c;通过后端模版定义、注释定义模块依赖。对经历过来的人来说&#xff0c;…

再说开源软件

开源软件推动技术创新 开源软件的相关话题&#xff0c;我曾经进行过原创文章的讨论&#xff0c;想了解的&#xff0c;可以参考我的文章&#xff1a; 【AI】一文读懂大模型套壳——神仙打架&#xff1f;软饭硬吃&#xff1f;-CSDN博客 【AI】马斯克说大模型要开源&#xff0c…

二叉树和堆(优先队列)

前言&#xff1a; 本章会讲解二叉树及其一些相关练习题&#xff0c;和堆是什么。 二叉树&#xff1a; 二叉树的一些概念&#xff1a; 一棵二叉树是有限节点的集合&#xff0c;该集合可能为空。二叉树的特点是每一个节点最多有两个子树&#xff0c;即二叉树不存在度大于2的节点…

Java语言体系

一、体系理论 作为一个程序员终身学习是其必备的技能&#xff0c;我认为回顾能够更好的去让自己理解知识&#xff0c;将这些碎片化的知识练习起来。 最近由于不断进行知识学习与整理&#xff0c;越发觉得作为任意一个知识体系&#xff0c;只要能够建立对这个知识的自我理解的知…

酷开科技荣获“消费者服务之星”称号后的未来展望

恭喜酷开科技荣获2023年第四季度黑猫平台“消费者服务之星”称号&#xff01;这是对酷开科技长期以来坚持用户至上、用心服务的肯定和认可。作为OTT行业的佼佼者&#xff0c;酷开科技一直秉承着“以用户为中心”的服务理念&#xff0c;不断追求卓越品质&#xff0c;为用户提供更…