从已知子串开始提取已知长度的子串

时间:2019-11-27 11:41:34

标签: string bash shell text

我正在尝试解析具有已知格式的文本文件,但是每一行都不是100%一致。

文件的每一行都包含以下格式的数据... x03:0xDEADBEEF ... x04:0xDEADBEEF ... x05:0xDEADBEEF ... ect

我希望能够从此字符串中提取特定的x值并将其打印到stdout。

我无法找出执行此字符串搜索的最佳方法,我确定有一个未使用sed的解决方案,希望有人可以提供帮助。

我尝试了使用偏移量进行非常简单的pamaeter扩展,但是发现字符串的格式在每一行上都不完全相同。

我现在已经尝试过:

for line in data.txt; do grep -Po 'x10:[^.]*' $line; grep -Po 'x05:[^.]*' $line; grep -Po 'x06:[^.]*' $line;grep -Po 'x07:[^.]*' $line; done

这似乎将打印所有x10,然后打印所有x05 ect。

1 个答案:

答案 0 :(得分:0)

这是解决我问题的方法。

let count=1
while read line; do
    echo "Test Result: ${count}"
    let count=count+1
    grep -Po 'x10:[^.]*' <<< "$line"
    grep -Po 'x05:[^.]*' <<< "$line"
    grep -Po 'x06:[^.]*' <<< "$line"
    grep -Po 'x07:[^.]*' <<< "$line"
    grep -Po 'x22:[^.]*' <<< "$line"
    grep -Po 'x23:[^.]*' <<< "$line"
    grep -Po 'x24:[^.]*' <<< "$line"
    grep -Po 'x25:[^.]*' <<< "$line"        
    grep -Po 'x26:[^.]*' <<< "$line"
    grep -Po 'x27:[^.]*' <<< "$line"
    echo
done < data.txt