我正在尝试创建一个脚本来从文件中提取帐户代码。该文件本身很长并且包含许多其他数据,但我在下面包含了我正在查看的部分的摘录(在此摘录之前和之后还有其他内容)
我感兴趣的文件部分有时看起来像这样
Account Customer Order No. Whse Payment Terms Stock No. Original Invoice No.
VIN No.
AAAAAA01 9999 1000 30 days
有时看起来像这样
Account Customer Order No. Whse Payment Terms Stock No. Original Invoice No.
AAAAAA01 9999 1000 30 days
(一个字段切断了末端,该字段一直缠绕到它自己的线上)
我知道| tr -s ' ' | cut -d ' ' -F 1
一旦我有了它所在的行,我就可以使用它来拉取代码,但这不是一个设定的行号(本节之前的内容是动态的)。
我首先尝试使用额外字段处理案例,我认为将其作为可选匹配很容易?
用于分隔字段的空格数可以更改,因为这本质上是 OCRed。
到目前为止我的一些尝试 - (假设文件来自 STDIN)
| sed -n '/\s*Account\s\+Customer Order No\.\s\+Whse\s\+Payment Terms\s\+Stock No\.\s\+Original Invoice No\.\s\+VIN No\.\s*/{n;p;}'
| sed -n '/\s*Account\s\+Customer Order No\.\s\+Whse\s\+Payment Terms\s\+Stock No\.\s\+Original Invoice No\.\s*\n\s*VIN No\.\s*/{n;p;}'
| sed -n '/\s*Account\s\+Customer Order No\.\s\+Whse\s\+Payment Terms\s\+Stock No\.\s\+Original Invoice No\.\s*\r\s*VIN No\.\s*/{n;p;}'
| sed -n '/\s*Account\s\+Customer Order No\.\s\+Whse\s\+Payment Terms\s\+Stock No\.\s\+Original Invoice No\.\s*\r\n\s*VIN No\.\s*/{n;p;}'
这些都无法匹配
| sed -n '/\s*Account\s\+Customer Order No\.\s\+Whse\s\+Payment Terms\s\+Stock No\.\s\+Original Invoice No\.\s*/,/\s\*VIN No\.\s*/{n;p;}'
这至少匹配了一些东西,但令人沮丧地打印了 VIN 号行,然后每隔一行打印一次。似乎也更难标记为表达式的可选部分。
因此,给定完整文件的输入(包括上述任何一个摘录),我正在寻找任何一个的输出
AAAAAA01 9999 1000 30 days
(然后我可以修剪到所需的数据)或者AAAAAA01
是否有更简单的方法可以直接获取。