我是编程新手!!
有人可以帮忙删除:
时间戳中第一个位置的吗::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
。
答案1
要截断第一个字符,您还可以使用cut -c
:
$ echo ":29.06.2019 23:03:17" | cut -c 2-
29.06.2019 23:03:17
答案2
使用
cut -d: -f2-
代替
cut -d: -f2
获取从第二个字段到行尾的任何内容:
TDS="$(grep 'Logfile started' process.log | awk '{print $3,$4}' | cut -d: -f2-)"
echo "$TDS"
答案3
awk
是一款很酷的工具,你可以用它解决非常复杂的任务。但对于你的问题,我宁愿坚持使用 bash 的基本功能。
为了轻松删除替换内容,我将执行以下操作:
zehe="Logfile started :29.06.2019 23:03:17"
echo "${zehe#*:}"
这将打印:
29.06.2019 23:03:17
当我处于你的位置并开始学习编程和 bash 时,我学到了很多这本手册的内容:
您可以找到更多与您的问题相关的示例和有趣信息这里,寻找‘子字符串删除’。
答案4
由于您已经在处理这个问题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)
,它将用输入字符串中REGEX
的字符串替换正则表达式的所有匹配项。在这里,我们将从第三个字段()开始的第一个(表示“开头”)替换为空。REPLACEMENT
TARGET
:
^
$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"