我是编程新手!!
任何人都可以帮助删除:
时间戳中的第一个位置::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
.
要切断第一个字符,您还可以使用
cut -c
:利用
代替
从第二个字段到行尾获取任何内容:
这是一个
sed
解决方案:该命令
sed 's/^://'
所做的是将每行开头s
的冒号字符替换为空字符串。:
^
//
这是一个棘手的
awk
解决方案,我们将字段分隔符更改为^:
,如上所述,并输出(每行的)第二个字段:该任务也可以通过
grep
(解释)完成,这可能是处理大量数据的最快解决方案:或者直接通过以下命令处理文件,
^
去掉限制:以上也可以通过
sed
捕获组来实现()->\1
:表达式
^.*<something>.*$
将匹配整行的位置,其中包含<something>
. 该命令s/old/new/
将用第一个捕获组的内容替换这一行(括号中的表达式可能更具体)。该选项-r
启用扩展的正则表达式。该选项-n
将抑制的正常输出,sed
最后该命令p
将打印匹配项。awk
是一个很酷的工具,你可以用它解决非常复杂的任务。但是对于您的问题,我宁愿坚持 bash 的基本功能。对于这种简单的替换删除,我会执行以下操作:
这将打印:
当我处于你的位置并开始学习编程和 bash 时,我学到了很多这本手册的内容:
ABS - 高级 Bash 脚本指南
可以在此处找到有关您的问题的更多示例和有趣信息,查找“子字符串删除”。
既然你已经在处理这个
awk
,你也可以直接做整个事情:该
sub
命令的一般格式是sub(/REGEX/, REPLACEMENT, TARGET)
并将正则表达式的所有匹配项替换为输入字符串中的REGEX
字符串。在这里,我们将第三个字段 ( ) 中的第一个(表示“开始”)替换为空。REPLACEMENT
TARGET
:
^
$3
当然,如果您在 awk 中执行此操作,那么您也可以在 awk 中执行所有操作,并在一次操作中完成所有操作:
或者,在您的情况下:
另一个 bash 解决方案:
xargs
将stdin
(标准输入)转换为bash
命令的位置参数。echo
为tail -n1 /path/to/reportfile.txt
。