谁能帮我这个:
我正在尝试通过匹配字符串来提取时间戳。为此,我使用了 grep/awk 命令的组合。由于字符串在 [1] 之前有 4 个空格,在 [1] 之后有一个空格,我不知道该如何解决它。我是编程新手,所以需要一些帮助。
IS="$(grep 'Starting [1] TaskInit' process.log | awk '{print $4}')"
echo "$IS"
目的:它应该与 process.log 文件中的字符串匹配,并打印出与该行相关的时间戳。
答案1
空格不是这里的问题,它应该可以正常工作。
但括号[
需要在正则表达式中转义。因此写:
grep 'Starting \[1] TaskInit' process.log
在你的情况下,因为你想匹配一个固定的字符串而不是正则表达式,所以你应该使用grep -F
。那么你就不需要转义了:
grep -F 'Starting [1] TaskInit' process.log
答案2
您只需要转义方括号,因为它们具有特殊含义:
grep 'Starting \[1\] TaskInit' process.log
此外,我只会awk
为此任务使用,为此目的你需要类似的东西:
awk '/Starting \[1] TaskInit/ {print $4}' process.log