我有一个字符串:
登录:squid.log.2017.11.13
我需要删除squid.log.
以便我看到:
日志:2017.11.13
我尝试cut
echo "Log for: squid.log.2017.11.13" | cut -d'.' -f3-5
但我最终得到了:
2017年11月13日
如何获得我想要的结果?
答案 0 :(得分:2)
您可以使用sed
剪切不需要的部分:
echo "Log for: squid.log.2017.11.13" | sed 's/squid\.log\.//'
答案 1 :(得分:1)
使用sed
删除 不所需的部分
echo "Log for: squid.log.2017.11.13" | sed 's/squid\.log\.//'
答案 2 :(得分:1)
awk
救援!打破单调的非标准方法......
将要删除的文本定义为字段分隔符,并解析并打印输入行。
$ echo Log for: squid.log.2017.11.13 | awk -F' squid\\.log\\.' '{$1=$1}1'
Log for: 2017.11.13
答案 3 :(得分:0)
此解决方案比之前提供的解决方案更具可重用性:
awk '/^Log/{ split($3,x,"."); print $1" "$2" "x[length(x)-2]"."x[length(x)-1]"."x[length(x)] };'
这将查找以Log
开头的所有行,然后抓取包含squid.log.2017.11.13
的第3列,并利用split
内置函数将字符串拆分为数组{{ 1}}使用x
作为分隔符。一旦我们得到了数组.
,我们知道最后3个值将始终是日期,无论字符串的其余部分如何,这都会起作用(即使x
不同) - 我们可以使用squid.log
内置来确保我们只获得最后三个元素。
然后我们只打印重新格式化的字符串length
- 将print $1" "$2" "x[length(x)-2]"."x[length(x)-1]"."x[length(x)]
重新插入适当的位置,因为它们被用作.
分隔符而被剥离。
输出:
split