如何只列印票號?

如何只列印票號?

以下是文件的內容,我只需要列印「[]」中包含的票號。很想知道是否可以使用 sed 和 grep 命令來完成此操作。

[request://Problem/26727777] SSO Components (UAT)
[request://Problem/25709048] [SERVER-SETUP] Setup 14xMDN, 10xPRN 
[request://Problem/26716590] Logs not populated properly from all servers
[request://Problem/23995808] Prod: Create requestmary

輸出應該是:

26727777
25709048
26716590
23995808

我嘗試過sed -e 's/[^0-9]//g' ticket | sed '/^$/d',但無法獲得所需的輸出。它還包括該行中的其他數值,我只需要取得票號:

226829515211
226855182
2268555334
226819615
226781310
226853999
226828948216

答案1

您可以使用 GNU grep

$ grep -oP '/\K\d+(?=])' ticket 
26727777
25709048
26716590
23995808

或者sed

sed -E 's#.*/([0-9]*).*#\1#g' ticket
26727777
25709048
26716590
23995808

上述兩者都適用於您給出的範例,但它們是否適用於您的真實文件將取決於文件​​中的其他行。它們印出 a 之後的所有數字/,對於grep,印出 a 之前的所有數字]。如果您還有其他符合這些條件的行,您將需要向我們展示您的整個文件。

答案2

我個人會使用perl。

perl -lne 'print /(\d+)\]/'

應該做到這一點。

-l說“整理換行符” - 它會自動將它們從行中刪除,並將它們插入到每個print.

-n說'將其包裝在一個while (<>) {循環中 - 它像會那樣逐行迭代 STDIN (或文件)grep

並且-e是“表達式”(或“執行”我猜)來運行引號中的命令。 (否則perl請從 讀取程式STDIN

我們使用正規表示式的預設匹配是 against $_(在這種情況下,即當前行)這一事實。

因為我們指定了一個捕獲組,所以它返回捕獲值的(單個元素)列表,而不是返回“true”或“false”:

\d+是一位或多位數字。 (這是一個“高級”正則表達式,與 大致相似[0-9]+,但如果您使用非拉丁數字,其工作方式會有所不同),並且我們需要在]其後面添加一個。

並且因為我們g在正規表示式的末尾使用,每行僅匹配一次。

答案3

sed 's/[^0-9]*\([0-9]*\).*/\1/'

但如果票號有固定寬度,我寧願使用cut.

編輯:使用 grep: grep -o '^\[[^0-9]*[0-9]*' | grep -o '[0-9]*'

答案4

tr "\[\]/" " "| awk '/request/ {  print $3 }'

相關內容