首页 > 系统服务 > 详细

Shell之三剑客

时间:2019-10-01 15:34:31      阅读:91      评论:0      收藏:0      [点我收藏+]

Shell之三剑客

?? Written by Zak Zhu

学习python风格, 优雅规范书写shell代码

参考

  • 马哥linux视频
  • RHCE培训

Grep

Global search Regular Expression and Print out the line

grep [OPTIONS] "PATTERN" [FILE...]
Options:
    -E, --extended-regexp           # equal to "egrep"
    -i, --ignore-case
    -n, --line-number
    -v, --invert-match
    -o, --only-matching             # show only the part of a line matching PATTERN
    -r "PATTERN" DIR    # 根据文件内容, 查找文件
    -A NUM, --after-context=NUM
    -B NUM, --before-context=NUM
    -C NUM, --context=NUM
    -w, --word-regexp
    --color

练习:

  1. 显示/proc/meminfo文件中的以大小写s的开头的行

    grep -E -i "^s" /proc/meminfo --color

    技术分享图片

  2. 取出默认shell为bash的用户

    cat /etc/passwd | grep "/bin/bash" | awk -F":" ‘{print $1}‘

    技术分享图片

  3. 找出netstat -tan命令执行的结果中以“LISTEN”或“ESTABLISHEN”结尾的行

    netstat -tan | grep -E "LISTEN|ESTABLISHED" --color

    技术分享图片

  4. 显示/etc/ssh/sshd_config文件中非注释和非空白行的内容

    grep -E -v "^#|^$" /etc/ssh/sshd_config

    技术分享图片

Sed

  • Stream Editor for filtering and transforming text
  • It‘s a line editor as well
  • It‘s not modify the content of file by default, just print on the screen
  • Support RE
sed [OPTIONS] "Startline,Endline EditCommand" FILE...

sed [OPTIONS] "/Pattern1/,/Pattern2/EditCommand" FILE...

sed [OPTIONS] "[Startline,Endline]s/old_pattern/new_word/[gi]" FILE... 
# g global line; i ignore-case

sed [OPTIONS] "[/Pattern1/,/Pattern2/]s/old_pattern/new_word/[gi]" FILE...

Options:
    -n, --silent
    -i,             # edit files in place
    -E -r, --regexp-extended
EditCommands:
    p               # print (always use with the "-n" option)
    d               # delete
    i \TEXT         # insert text
    a \TEXT         # append text
    r FILENAME      # append text Read from filename

练习:

  1. 在sed_test文件的第2行和第3行中间插入一行"hello world!"

    sed "3,3 i \hello world!" sed_test

    技术分享图片

  2. 在sed_test文件的含有"lover"行后追加一行"zac"

    sed "/lover/a \zac" sed_test

    技术分享图片

  3. 把sed_test文件中的"like"和"liker"全部替换成"love"和"lover"

    sed "s/like/love/g" sed_test

    技术分享图片

  4. 替换/etc/inittab文件中”id:3:initdefault:"一行中的数字为5

    sed -i "s/:3:/:5:/" /etc/inittab

    技术分享图片

  5. 删除/etc/init.d/funcions文件中的空白行

    sed "/^$/d" /etc/init.d/functions

    技术分享图片

  6. 删除/etc/inittab文件中位于行首的#

    sed "s/^#//" /etc/inittab

    技术分享图片

  7. 删除/boot/grub/grub.conf文件中行首的空白字符

    sed "s/^[[:space:]]+//" /boot/grub/grub.conf

    技术分享图片

Awk

报告生成工具

把文件中读取到的每一行的每个字段分别进行格式化, 而后进行显示

# 不加-F选项时, 分割符默认为空白
$NF     # the built-in var "NF" is set to the Number of Fields

awk -F'SEP' '/PATTERN/{print $X}' FILE...
awk -F'SEP' '!/PATTERN/{print $X}' FILE...  # !意思是取模式的非集

awk -F'SEP' 'EXPRESSION{print $X}' FILE...
EXPRESSION:
    $X<K
    $X<=K
    $X>K
    $X>=K
    $X==K
    $X~"PATTERN"        # 取匹配模式的行

练习:

  1. 显示GID小于等于500的组

    awk -F‘:‘ ‘$3<=500{print $1}‘ /etc/group

    技术分享图片

  2. 显示默认shell为nologin的用户

    awk -F‘:‘ ‘$NF~"nologin"{print $1}‘ /etc/passwd

    技术分享图片

  3. 显示/usr/lib/sysctl.d/00-system.conf文件中定义的内核参数名称

    awk -F‘ = ‘ ‘!/^#|^$/{print $1}‘ /usr/lib/sysctl.d/00-system.conf

    技术分享图片

  4. 通过ifconfig命令显示eth0网卡的ip地址

    ifconfig eth0 | awk ‘/inet/{print $2}‘

    技术分享图片

?? Oh Yeah!

Shell之三剑客

原文:https://www.cnblogs.com/zakzhu/p/11615415.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!