我是编程新手!!
任何人都可以帮助删除:时间戳记中的第一个位置::29.06.2019 23:03:17
目前,我正在尝试使用awk / cut命令执行此操作,如下所示:
TDS="$(grep 'Logfile started' process.log | awk '{print $3,$4}' | cut -d: -f2)"
echo "$TDS"
29.06.2019 23
输出不是我想要的!我想将其打印为29.06.2019 23:03:17。
我是编程新手!!
任何人都可以帮助删除:时间戳记中的第一个位置::29.06.2019 23:03:17
目前,我正在尝试使用awk / cut命令执行此操作,如下所示:
TDS="$(grep 'Logfile started' process.log | awk '{print $3,$4}' | cut -d: -f2)"
echo "$TDS"
29.06.2019 23
输出不是我想要的!我想将其打印为29.06.2019 23:03:17。
Answers:
awk是一个很酷的工具,您可以使用它解决非常复杂的任务。但是对于您的问题,我宁愿坚持bash的基本功能。
为了方便删除,我将执行以下操作:
zehe="Logfile started :29.06.2019 23:03:17"
echo "${zehe#*:}"
这将打印:
29.06.2019 23:03:17
当我处于您的位置并开始学习编程和bash时,我从该手册中学到了很多东西:
在这里可以找到更多示例和有关您的问题的有趣信息,查找“子字符串删除”。
这是一个sed解决方案:
$ echo ':29.06.2019 23:03:17' | sed 's/^://'
29.06.2019 23:03:17
该命令sed 's/^://'正在执行的操作是用空字符串替换每行开头s的冒号字符。:^//
这是一个棘手的awk解决方案,其中我们将字段分隔符更改为^:,如上所述,然后输出(每行的)第二个字段:
$ echo ':29.06.2019 23:03:17' | awk -F'^:' '{print $2}'
29.06.2019 23:03:17
该任务也可以通过grep(说明)来完成,这可能是处理大量数据的最快解决方案:
$ echo 'Logfile started :29.06.2019 23:03:17' | grep -Po '^Logfile started :\K.*'
29.06.2019 23:03:17
或通过以下命令直接处理文件,其中^已删除限制:
grep -Po 'Logfile started :\K.*' process.log
sed捕获组也可以实现上述目标()->\1:
sed -nr 's/^.*Logfile started :(.*)$/\1/p' process.log
该表达式^.*<something>.*$将匹配整行,其中包含<something>。该命令s/old/new/将用第一个捕获组的内容替换此行(括号中的表达式可能更具体)。该选项-r启用扩展的正则表达式。该选项-n将禁止正常输出,sed最后该命令p将打印匹配项。
awk可以使用带有特殊含义的字符的多字符FS!我今天学到的东西。
由于您已经在中进行了处理awk,因此您也可以直接完成整个操作:
$ echo "foo bar :29.06.2019 23:03:17" | awk '{sub(/^:/,"",$3); print $3,$4}'
29.06.2019 23:03:17
该sub命令的一般格式为sub(/REGEX/, REPLACEMENT, TARGET),并将用输入string中REGEX的字符串替换正则表达式的所有匹配项。在这里,我们将第三字段()中的第一个(表示“开始”)替换为空。REPLACEMENTTARGET:^$3
当然,如果您在awk中进行此操作,则最好在awk中进行所有操作,并通过一个操作即可完成整个操作:
$ echo "Logfile started :29.06.2019 23:03:17" |
awk '/Logfile started/{sub(/^:/,"",$3); print $3,$4}'
29.06.2019 23:03:17
或者,在您的情况下:
TDS="$(awk '/Logfile started/{sub(/^:/,"",$3); print $3,$4}' process.log)"
echo "$TDS"
另一个bash解决方案:
$ echo "Logfile started :29.06.2019 23:03:17" | xargs bash -c 'echo "${2#*:} $3"'
29.06.2019 23:03:17
xargs将stdin(标准输入)转换为bash命令的位置参数。echo为tail -n1 /path/to/reportfile.txt。