Sed 中使用正则表达式

Sed 中使用正则表达式【updating…】

一. 实战案例一

1. 需求

现在有一个字符串,需要将其前导的数字和下划线去掉,只保留后一部分,例如:
对于字符串:20181219_191533_EXT_T_POI_CHANGE_LOG_POI,处理后的字符串就是:EXT_T_POI_CHANGE_LOG_POI;如果是20181219_191533_EXT_T_POI_CHANGE_2_LOG_POI,处理后就应该是:EXT_T_POI_CHANGE_2_LOG_POI

2. 代码

  • 方式1
[root@server4 temp]# echo "20181219_191533_EXT_T_POI_CHANGE_LOG_POI" |sed 's/[0-9]\+//g' | sed 's/^_\+//'
EXT_T_POI_CHANGE_LOG_POI

上述的逻辑是:
step 1:首先过滤全部数字;
step 2:接着过滤前导_
但是使用上述的 sed + 正则表达式可能会得到不理想的结果。如下所示:

[root@server4 temp]# echo 20181219_191533_EXT_T_POI_CHANGE_LOG_2_POI| sed 's/[0-9]\+//g' | sed 's/^_\+//'
EXT_T_POI_CHANGE_LOG__POI

这样也会把我们想要的task_name 中的数字给过滤了,导致产生了错误的结果。

  • 方式2
echo 20181219_191533_EXT_T_POI_CHANGE_LOG_2_POI| sed 's/^[0-9_]\+//g'

上述正则表达式的逻辑是:
step 1. 处理前导的数字或者_
这个的结果就是:EXT_T_POI_CHANGE_LOG_2_POI。这才是正确的。

你可能感兴趣的:(Linux)