![带有星号和锚点的自定义 GREP?](https://linux22.com/image/1095568/%E5%B8%A6%E6%9C%89%E6%98%9F%E5%8F%B7%E5%92%8C%E9%94%9A%E7%82%B9%E7%9A%84%E8%87%AA%E5%AE%9A%E4%B9%89%20GREP%EF%BC%9F.png)
我有很多 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