带有星号和锚点的自定义 GREP?

带有星号和锚点的自定义 GREP?

我有很多 EDI 文件(基本上是一行乱码文本),大约 300mb/pcs。

我正在寻找与此匹配的模式:

`*UP*605284466346 {lots of other stuff inbetween with set length} QTY*17`

我知道北方邦是所有部分其次是库存单位 尾端是 QTY 与数量 #

我想找到的是库存编号:605284466346数量:17

这是我的勇敢尝试:

find * | grep -lir 'UP*605284466346.*QTY\*97' * | grep -v svn

答案1

awk效果更好:

#!/bin/bash

# Usage findsku <SKU> <QTY> <DIR>
# Example: findsku 605284307892 14 ~/mydir
# Result: found ./teste.edi: SKU=605284307892, QTY=14

sku=$1
qty=$2
dir=$3

echo "looking for SKU #${sku} with QTY=${qty} in ${dir}:"

while read -r file; do
    awk -F'*' -v sku="$sku" -v qty="$qty" 'BEGIN{RS="*UP*"} $2==sku &&
    $NF==qty {print "found " FILENAME ": SKU=" sku ", QTY=" qty}' "$file"
done < <(find "$dir" -name "*.edi" -type f)

我认为它基本上是不言自明的,您可以调整任何您想要的 sku 和数量值。但您可以随意询问有关它的任何问题!

它将在给定的范围内递归DIR,并且您可以轻松地调整它以扫描除*.edi

相关内容