從行尾刪除兩個點

從行尾刪除兩個點

我需要使用正則表達式刪除從行尾開始並返回兩個點的所有文字。

gtk2-2.24.22-2.fc20.x86_64

變成

gtk2-2.24.22-2

這是文字檔案的輸出rpm -qa,我需要截掉末尾。

答案1

需要正規表示式?我知道這是一個有點廉價的解決方案,但正規表示式並不是解決所有問題的解決方案。

例如,使用 Bash 字串操作:

foo="gtk2-2.24.22-2.fc20.x86_64"
echo ${foo%.*.*} # strip the longest match from the last dot

返回gtk2-2.24.22-2

您可以像這樣在文件上調用它:

foo=$(head -1 file.txt)
echo ${foo%.*.*} > new-file.txt

正規表示式擅長從頭開始解析某些內容,而不是從後面解析,因為它們以“貪婪”的方式從左到右進行消耗。這是可行的,但您需要比在簡單的 Bash 中執行的操作更詳細一些。

請注意,Bash () 中看起來像正規表示式的內容.*並不是「真正的」正規表示式。在真正的正規表示式中,點.代表所有字符,表示*前一個字符(組)重複 0-n 次。然而,在 Bash 中,點.表示實際的點,並且*是所有字元的通配符。

相關內容