
我需要使用正則表達式刪除從行尾開始並返回兩個點的所有文字。
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 中,點.
表示實際的點,並且*
是所有字元的通配符。