收藏文章 楼主

linux 三剑客 grep, awk, sed,shell脚本必备基础

版块:shell   类型:精华   作者:小绿叶技术博客   查看:2715   回复:3   获赞:2   时间:2019-10-09 16:08:44

shell-sed增删改查


find / -name httpd.conf # 查看文件在哪个目录


-----------------------------  grep 文本匹配搜索工具  -------------------------------


grep -n 'httpd'  xxx.txt # 在文件中使用grep 进行查找字符串为 'httpd' 的行

# 字符 'w[ea]ll'  为:weall 和 wall   去匹配这两个字符的所有行并显示

  # 字符 'w[^e]ll' 为: 匹配非well 的所有行,并显示

# 字符 '^www' 为: www开头的所有行,并显示

# 字符 'w..k' 为: 匹配 w和K 之间的任意4位字符串,

# 字符 'g*g' 为: 其中的 * 是N个字符为g,如:ggg



---------------------------  sed 增加,删除,替换,选取  ----------------------------


sed [option] [command] [file] # option [ˈɒpʃn] 选项  {wo p xing}

# command [kəˈmænd] 命令

# file [faɪl] 文件,被操作的文件


#参数: a  新增; c  替换; d  删除; i  插入; p  打印; s  取代


--------  d 删除   -------

sed '1d' 1.txt # 使用sed 中 d删除操作:删除第1行数据;

# 需要跟上参数 -i 写入文件,才会对文件本身进行操作

# '$d'    删除最后一行;符号 $ 最后一行

# '1,3d' 删除1到3行

# '1,$d' 删除第一行到最后一行

--------  p 打印  --------

sed -n '/you/p' 1.txt # 匹配字符 you 的行 并打印; /you/ 是正则表达式,要与n 结合使用


--------  a 新增  --------

sed '1,2a 你好啊' 1.txt # 在第一行,第二行后面新增一行  '你好啊' ;  加参数 -i  才会对文件进行修改

# '1a 你好啊\n很高兴认识你'  在第一行后面加两行字符,  \n  换行


--------  c 替换  ---------

sed '1c 你好啊'  1.txt # 将第一行替换为: 你好啊




-----------------------------  awk  以字段为单位进行处理  -------------------------------

awk  [options]  '{pattern + action}'  {filenames}

# options     ['ɒpʃnz] 选择 {啊普醒日}

# pattern      [ˈpat(ə)n] 模式

# action      [ˈakʃ(ə)n] 行为

# file names 文件名


awk -F ":" 'NR>=2 && NR<=6{print NR,$1}' /etc/passwd 

# -F指定分隔符为 :

# 给NR变量赋值一个范围:第2行和第6行

# {print NR打印输出,$1 为第一列}

# 从这个文件里面



=================  sed -i  ==============

#!/bin/bash

sed -i -e 's/#ETCD_LISTEN_PEER_URLS.*/ETCD_LISTEN_PEER_URLS="http:\/\/10.32.24.123:2380"/g' \

#修改第五行,符号  \ 为换行或特殊字符转义符号

-e 's/ETCD_LISTEN_CLIENT_URLS.*/ETCD_LISTEN_CLIENT_URLS="http:\/\/10.32.24.123:2379"/g' \

#修改第6行,符号 .*  后面的所以内容


-e 's/^ETCD_NAME="default"/ETCD_NAME="controller"/g' \

-e 's/#ETCD_INITIAL_ADVERTISE_PEER_URLS.*/ETCD_INITIAL_ADVERTISE_PEER_URLS="http:\/\/10.32.24.123:2380"/g' \

-e 's/^ETCD_INITIAL_ADVERTISE_PEER_URLS.*/ETCD_INITIAL_ADVERTISE_PEER_URLS="http:\/\/10.32.24.123:2379"/g \

-e 's/#ETCD_INITIAL_CLUSTER_TOKEN.*/#ETCD_INITIAL_CLUSTER_TOKEN="etc-cluster-01"/g' \

-e 's/#ETCD_INITIAL_CLUSTER_STATE.*/#ETCD_INITIAL_CLUSTER_STATE="new"/g' /etc/etcd/etcd.conf

# 指定文件








YDAY=$(date +"%Y%m%d" -d "-1 days")

TDAY=$(date +"%Y%m%d")

#获取当前 系统日期-1 ,存入 变量YDAY ,格式 YYYYMMDD

#获取当前 系统日期 ,存入 变量TDAY ,格式 YYYYMMDD


awk  -v YDAY=$YDAY  -v TDAY=$TDAY '

NR==1 {

if(substr($0,20,8)==YDAY)

    $0=substr($0,1,19) TDAY substr($0,28)

if(substr($0,34,8)==YDAY)

    $0=substr($0,1,33) TDAY substr($0,42)

}

/^TH/{

if(substr($0,21,8)==YDAY)

    $0=substr($0,1,20) TDAY substr($0,29)

}

{print }'  文件名


查找文件 首行 第20到27个字符 的内容等于 变量YDAY 的,替换成 变量TDAY 

查找文件 首行 第34到41个字符 的内容等于 变量YDAY 的,替换成 变量TDAY 

查找文件中,行首为TH的行,查找第21到28个字符的内容等于 变量YDAY的,替换成 变量TDAY

其他位置有字符串等于YDAY的不能被修改


提供企业建站服务,免费网防系统,提交信息登录 http://yundun.ddoss.cn 邮箱: proposal@ddoss.cn 
回复列表
默认   热门   正序   倒序

回复:linux 三剑客 grep, awk, sed,shell脚本必备基础

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息