【shell脚本】shell脚本之sed高级应用、awk基本用法(shell脚本基础学习五)_shell awk某行替换为列并补齐

55 阅读3分钟

恭喜你,找到宝藏博主了,这里会分享shell的学习整过程。

shell 对于运维来说是必备技能之一,它可以提高很多运维重复工作,提高效率。

shell的专栏,我会详细地讲解shell的基础和使用,以及一些比较常用的shell技巧。

有需要的可以从这里开始,可以教会你如何去进行shell脚本的编写,提高你的工作效率。
从第一篇基础开始:
【shell脚本】shell脚本之概念、运行方式、变量的使用、交互式脚本、运算(shell脚本基础学习一)_向往风的男子的博客-CSDN博客

sed高级应用--- awk基本用法 ---
sed 选项  (定址符)指令    处理的文件
前置指令 |  sed 选项  (定址符)指令
-n   -r   -i     p    d    s

cat nssw.txt

Hello th6e World
ni ha7o ma beijing

删除文件中每行的第二个、最后一个字符
sed 's/.//2;s/.$//' u

将文件中每行的第一个、倒数第1个字符互换
( )  保留(相当于复制)   \1 \2 相当于粘贴
sed -r 's/^(.)(.*)(.)$/\3\2\1/' u

删除文件中所有的数字
sed 's/[0-9]//g' u

为文件中每个大写字母添加括号
sed -r 's/([A-Z])/(\1)/g' u
----------------------------------------------------------------------
a在行下追加    i在行上添加    c替换整行

sed 'i XXXX' a        所有行上添加XXXX
sed '1i XXXX' a       第一行上添加XXXX
sed '1,2i XXXX' a     1~2行上添加
sed '1a XXXX' a       第一行下追加
sed 'c XXXX' a        所有行替换为XXXX
sed '1c XXXX' a       第一行替换
sed '/abc/c XXXX' a   有abc的行替换

-----------------------------------------------------------------------
编写脚本,找出使用bash的用户,按照 名字 --> 密码  的格式输出: 
#!/bin/bash
u=`sed -n '/bash$/s/:.*//p' /etc/passwd`    找到用bash的用户,并且把名字都存在变量u中
for i in $u   将变量u交给for循环处理
do
    x=`grep $i: /etc/shadow`   第一次循环,变量i是第一个用户
    a1=${x#*:}        掐头
    a2=${a1%%:*}    去尾
    echo "$i --> $a2"     输出
done

-------------------------------------------------------
"Open Source" is a good mechanism to develop programs.
apple is my favorite food.
Football game is not use feet only.
this dress doesn't fit me.
However, this dress is about $ 3183 dollars.
GNU is free air not free beer.
Her hair is very beauty.
I can't finish the test.
Oh! The soup taste good.
motorcycle is cheap than car.
This window is clear.
the symbol '*' is represented as start.
Oh!    My god!
The gd software is a library for drafting programs.
You are the best is mean you are the no. 1.
The world <Happy> is the same with "glad".
I like dog.
google is the best tools for search keyword.
goooooogle yes!
go! go! Let's go.
# I am VBird
-----------------------------------------------
========================================
正则     
grep   模糊搜索
sed    可以修改文档
awk    精确搜索
------------------------------------------------
awk使用方式:
1 ,  awk 选项  (条件)指令   被处理的文件
2 ,    前置命令  |   awk 选项  (条件)指令  
选项:
-F 定义分隔符    
指令
print  输出
内置变量:
列  $0  $1  $2  $3 ...... NF列   NR行

awk '{print}' u
awk '{print $2}' u
awk '{print $0}' u
awk '{print $1}' u
awk '{print $1 $3}' u
awk '{print $1,$3}' u
awk '{print $0,$3}' u
awk '/beijing/{print}' u
----------------------------------------------------
cat user    准备素材
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
awk -F: '{print $6}' user  修改分隔符为冒号, 显示第6列
/root
/bin
awk -F: '/root/{print $6}' user   配合正则匹配有root的行,显示第6列
/root
awk -F/ '/root/{print $3}' user   修改分隔符,显示第3列
bin
awk -F[:/] '/root/{print $9}' user  使用冒号或者斜杠做分隔符,显示第9列
awk -F: '{print $1"的解释器是"$7}' user  输出常量,需要使用引号
awk -F: '{print $1 abc $7}' user    不加引号,系统会识别为变量,如果变量没有定义,则输出的值为空
awk -F: '{print $1 "abc" $7}' user  加引号,变常量输出
awk -F: '{print NR,NF}' user     输出行号和列号
----------------------------------------------------------------------------------------
ifconfig eth0 |awk '/TX p/{print "当前主机eth0网卡的发送流量是"$5"字节"}'
ifconfig eth0 |awk '/RX p/{print "当前主机eth0网卡的接收流量是"$5"字节"}'


![img](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/28f9846cc8d34eefaf11c8d3635e3863~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzIxMjA3NDIwNDUy:q75.awebp?rk3s=f64ab15b&x-expires=1771131682&x-signature=MDCCsuBXZ0hEzBNoiJ44Pslzdlw%3D)
![img](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/bf1d52620c8143a781f7cb2df7b2b81a~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzIxMjA3NDIwNDUy:q75.awebp?rk3s=f64ab15b&x-expires=1771131682&x-signature=VkzsMWibY%2BonRSN1PYHe7WeEmxk%3D)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**了解详情》docs.qq.com/doc/DSlVlZExWQ0FRSE9H**