awk、sed、grep文本处理(八)

一 、 把/etc/profile文件下的 export JAVA_HOME 这个开头的 这一句 提到 catalina.sh 的#!/bin/sh 下一行下面

大佬解答: (学到了数组)

下图的方式,这样会有问题,插入的时候因为空格问题,后面部分会提示错误,用数组就可以解决空格问题

变成这样了,export 后面的就没有了。  所以用数组

写法:

java_path=(`grep -E "^export JAVA_HOME.*" /etc/profile`)

echo ${java_path[*]}

sed -r '/#!\/bin\/bash/a'${java_path[0]}' '${java_path[1]}'' catalina.sh

二、使用sed精确匹配出*.pem的名称进行替换

s@/.*?.pem@新内容@

echo 'a/b/c.pem' | sed 's@/[^/]*.pem@/new@'

 

三、 取day值

line="/DATA/PUBLIC/SAVENER/ETL/ETL_SE_PM_LTE_CEL_ALL/province_id=811/day=20200721/hour=2020072123/811_20200721230000_20200722010201_01.txt"
1、 grep -oP '(?<=day=).*?(?=/)' 1.txt

2、 sed -r 's#.*(day=)([0-9]+)(/.*)#\2#' 1.txt

3、 sed -r 's#.*day=([^/]+).*#\1#' 1.txt

值得注意的是sed, 两则的 .* 不是随便写的,如果两则没有.* 则他\1输出的结果是全行

后面的[^/]+是贪婪模式下是个不错的固定技巧

四、awk取非#开头的Ip

192.168.1.99 root 22
192.168.1.100 root 22
#192.168.1.101 root 22
192.168.1.102 root 22
#192.168.1.99# root# 22
#
awk '{/^[^#]/print $1}' host.info

^[^#]第一个^是锚点(断言) , 也是零宽断言
(因为#号后面的字符可以跟[^#]匹配啊,所以加个锚点,加个锚点才是匹配指定位置的)

五、如何取出 name 1{} 大括号里的所有字符

cat file

r0{
name 1{
volume 0{
disk /dev/sdb;
} 
address  192.168.1.101:7788;
} 
    name 2{
    ...
    }
}

1、awk

awk '/name 1/,/}/' file
awk 'NR>2{print line}{line=$0}' a.txt

2、sed 

sed -n '/name 1/,/name 2/p' a | sed  '/name/d' | sed '$d'

3、perl 1 

4、awk 2

5、 grep

一次读入所有文本,开启单行模式,使"."能匹配所有,用前向否定环视来给.做限制。大概就是这样。

6、grep 2

递归法

7、perl 2

8、awk

六、取红色方框里的内容,应用用awk print 几就可以了

1、awk

ll --full-time | awk -F '[ .]' '{print $5,$6,$7}'
将空格和.号作为分隔

2、cut

ls -l --full-time | cut -d . -f 1 | cut -d  " " -f 5,6,7

3、grep

ll --full-time | grep -Po '\d+\s+\d{4}[^.]+'

先在匹配一小部分,然后用[^.]+   匹配
后面的[^.]+是贪婪模式下是个不错的固定技巧


以前也用到这个方法技巧

4、perl 1

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值