我有一個包含 40 個組件的 excel 檔案,我將它(在線)轉換為 txt 檔案以執行命令列功能。我想從中提取零件號(它是 6 位或 7 位數字)。有些遵循特定的模式。我想提取并保存在txt檔案中我的代碼:
list.txt
Product number 1 ac162049-2/slid||product|1971904|pgrid|119732683897|ptaid 1
Product number 2, its accessories 1-82/pcrid|5194541117|pkw|product|3418376|-SHOPPING 10
Product number 3 dip-40/dp/9761446 2
預期輸出:
productnumber.txt
1971904
3418376
9761446
我的代碼:
grep -Po '/\K.[0-9] [1-9]' hardware\ components_prashant.txt > serialnumber.txt
當前輸出:
9761446
uj5u.com熱心網友回復:
從查看您的示例資料,我相信列分隔符是管道?
假設零件號是第 1 列,數量是第 8 列,您可以這樣做以將其取出
cat list.txt | awk -F| '{ print $1, $8 }' > quantity.txt
uj5u.com熱心網友回復:
它只是前后帶有非字母數字的六位或七位數字嗎?
grep -Eo '\b[0-9]{6,7}\b' productnumber.txt
1971904
3418376
9761446
在-E擴展模式匹配中,\b是一個“詞邊界”。參見本教程。您也可以使用\<and ,\>就像我在下面所做的那樣。
[...]是匹配給定集合中任何內容的字符類。破折號 ( -) 表示一個范圍,從0到9(包括0到9 [0-9])的任何值也是如此。指定長度限制,因此表示一系列不小于 6 且不超過 7 的數字。{...}{6,7}
如果您想要之前提到的欄位,(...)是存盤分組,并且^是字符類中的否定,那么:
sed -E 's/^ *([^0-9] [0-9] ).*\<([0-9]{6,7})\>.* ([0-9] ) *$/\1|\2|\3/' productnumber.txt
Product number 1|1971904|1
Product number 2|3418376|10
Product number 3|9761446|2
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/341796.html
