我希望匹配文件index.txt导致的2位数字(30:02:40),但是如果条件允许我会坚持,我不知道如何比较结果并做一些事情。
index.txt
<tr><td>device</td> <td>10.10.10.1</td> <td>64232</td> <td>1</td> <td bgcolor=Red>30:02:40</td><tr>
script.sh
#!/bin/bash
output=$(cat index.txt | sed -e 's/>/ /g;s/</ /g'| awk '{print $16}')
if [ $output == '[0-9][0-9]:[0-9][0-9]:[0-9][0-9]' ]; then
echo "successful"
else
echo "$output"
fi
TX
答案 0 :(得分:1)
您有两个问题:
通过这两个调整,它可以工作:
if [[ $output == [0-9][0-9]:[0-9][0-9]:[0-9][0-9] ]]; then
echo "successful"
else
echo "$output"
fi
答案 1 :(得分:1)
xmlstarlet / xmllint是处理XML / HTML数据的正确工具 (对于xmlstarlet:唯一要求是您的内容应该是有效的HTML / XML文档/片段):
cdo monmean in.nc out.nc
输出:
xmlstarlet sel -t -v "//tr/td[@bgcolor='Red']" -n \
<(sed -E 's/([^[:space:]=<>]+=)([^[:space:]=<>]+)/\1"\2"/g; s/<tr>$/<\/tr>/' index.txt)
xmllint 方法:
30:02:40
答案 2 :(得分:1)
为什么不在awk
中进行匹配,而不仅仅是{print $16}
... | awk '$16~/^[0-9][0-9]:[0-9][0-9]:[0-9][0-9]$/{print "successful"; exit} {print $16}'
您还可以通过设置正确的分隔符将第一个sed
合并到此中,但需要更好地了解结构以确定所需的字段。
答案 3 :(得分:-1)
是的,某些html解析器会更好,但纯粹的bash解决方案可能是:
grep -oP "\d+:\d+:\d+" index.txt