仅删除日期和时间(即05-09-2018-10.13) 来自下面的字符串
/pi_nfs/pixin/axpin-zhgahh/was_logs/was_admin_logs/start_WPS.log.05-
09-2018-10.13:ADMU4000I: Server Node_axpin-zhgahh_AppClusterMember stop
completed.
/pm_nfs/pmfin/axpin-zhgahh/was_logs/was_admin_logs/start_WPS.log.05-
09-2018-23.00:ADMU4000I: Server Node_axpin-zhgahh_AppClusterMember stop
completed.
我尝试了下面的组合,但它返回了我
命令:
zgrep -i "AppClusterMember stop completed" /pi_nfs/pixin/axpin
zhgahh/was_logs/was_admin_logs/start_WPS.log.05-09-2018*|cut -d '.' -f3
输出:
05-09-2018-10.13:ADMU4000I: Server Node_axpin-zhgahh_AppClusterMember
stop completed
05-09-2018-23.00:ADMU4000I: Server Node_axpin-zhgahh_AppClusterMember
stop completed
预期输出:
05-09-2018-10.13
05-09-2018-23.00
答案1
回答
grep -Eo "[0-9]{2}-[0-9]{2}-[0-9]{1,4}-[0-9]{2}\.[0-9]{2}" file
解释
标志:
-E
- 使用扩展正则表达式。 (允许使用正则表达式中的某些字符而不转义它们。)
-o
- 仅打印匹配的输出。
正则表达式:
[0-9]
- 如果字符是0
-中的数字,则匹配该字符9
。
[0-9]{x}
x
-如果连续字符是数字,则匹配连续字符0
- 9
。
[0-9]{x,y}
x
-如果它们是数字,则至少匹配连续字符0
-9
但如果有更多字符,则匹配最多的y
字符。
-
没有特殊含义,grep
会尝试匹配确切的字符-
。
.
意味着any character
必须使用转义来\
表示确切的字符.
。
回答问题评论中的附加请求
zgrep -Po "[0-9]{2}-[0-9]{2}-[0-9]{1,4}-[0-9]{2}\.[0-9]{2}(?=.*stop completed\.)" file.gz
解释
从zgrep 手册:
Zgrep 在压缩或 gzip 压缩的文件上调用 grep。
所有指定的选项都直接传递给 grep。
因此,我将只解释新添加的标志和正则表达式部分。
标志:
-P
- 使用 Perl 正则表达式。 (允许前瞻)
正则表达式:
(?=.*stop completed\.)
(?=
- 正则表达式从到 的部分)
被称为Positive look-ahead
。
在这种情况下,它与之前的正则表达式匹配仅有的如果该行包含stop completed.
之后。
答案2
echo "/pi_nfs/pixin/axpin-zhgahh/was_logs/was_admin_logs/start_WPS.log.05-09-2018-10.13:ADMU4000I: Server Node_axpin-zhgahh_AppClusterMember stop completed." | cut -d"." -f3,4 | cut -d":" -f1
输出是
05-09-2018-10.13
所以我想你需要类似下面的东西
cut -d"." -f3,4 YOUR_FILENAME | cut -d":" -f1
YOUR_FILENAME
您要使用的实际文件名在哪里
答案3
awk -F: '{split($1,a,".");print a[3]"."a[4]}' input.txt
zgrep -i "AppClusterMember stop completed" /pi_nfs/pixin/axpin zhgahh/was_logs/was_admin_logs/start_WPS.log.05-09-2018* | awk -F: '{split($1,a,".");print a[3]"."a[4]}'
- -F:按 :(冒号)分割记录
- split($1,a,".") - 将记录 1 分割为 。 (点)并将值保留在称为 a 的数组中
- print a[3]"."a[4] - 打印数组值。