Regular-Expression

如何在 awk 中使用正則表達式作為欄位分隔符?

  • August 31, 2019

我正在嘗試將正則表達式用作awk. 從我的閱讀來看,這似乎是可能的,但我無法正確使用語法。

rpm -qa | awk '{ 'FS == [0-9]' ; print $1 }'
awk: cmd. line:1: { FS
awk: cmd. line:1:     ^ unexpected newline or end of string

想法?如果不明顯的話,目標是獲取沒有版本號的軟體列表。

你搞砸了你的引號和語法。要設置輸入欄位分隔符,最簡單的方法是使用-F命令行上的選項:

awk -F '[0-9]' '{ print $1 }'

要麼

awk -F '[[:digit:]]' '{ print $1 }'

這將使用任何數字作為輸入欄位分隔符,然後從每行輸出第一個欄位。

和表達式並不完全相同[0-9],具體取決於您的語言環境。見“之間的區別[[:digit:]]$$ 0-9 $$,$$ [:digit: $$] 和 \d “。

也可以FSawk程序本身中設置。這通常在一個BEGIN塊中完成,因為它是一次性初始化:

awk 'BEGIN { FS = "[0-9]" } { print $1 }'

請注意,單引號不能在 shell 中的單引號字元串中使用,並且awk字元串始終使用雙引號。

引用自:https://unix.stackexchange.com/questions/22273