[問題] sed 的 regular expression

看板Linux作者 (海納百川天下歸心)時間12年前 (2013/08/23 23:49), 編輯推噓6(604)
留言10則, 6人參與, 最新討論串1/1
bash-4.1.11 --> bash akode-2.0.2_1 --> akode ca_root_nss-3.12.11,1 --> ca_root_nss 我想把以上左邊變右邊,我會用 perl的 regular expression ^(.+)-(\d|\.|,|_)+ --> \1 這樣 但 sed 沒有 perl regexp,應該要怎麼用? 想把 -(數字 or . or , or _) 去掉 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.251.86

08/24 00:32, , 1F
sed 's/-[0-9].*//g' 醬?
08/24 00:32, 1F

08/24 01:02, , 2F
跟perl一樣的:sed "s/^\(.*\)-[0-9.,_][0-9.,_]*/\1/"
08/24 01:02, 2F

08/24 01:03, , 3F
不過那個 () \1 是多餘: sed "s/-[0-9.,_][0-9.,_]*//"
08/24 01:03, 3F
感謝,我自點小修改 sed 's/-[0-9.,_][0-9.,_]*$//' 不然 xorg-fonts-100dpi-7.5.1 會變成 xorg-fontsdpi-7.5.1

08/24 01:07, , 4F
請教二樓[0-9.,_]要出現兩次的目的是?
08/24 01:07, 4F
※ 編輯: newversion 來自: 140.112.251.86 (08/24 01:53)

08/24 02:31, , 5F
因為他 perl 用了 +, 不是用 *, sed 沒用 + 可以用.
08/24 02:31, 5F

08/25 20:39, , 6F
sed也有+但要跳脫\+或帶個-r參數開啟ERE模式就可直接用+了
08/25 20:39, 6F

08/25 20:42, , 7F
例如 sed 's/-[0-9.,_]\+$//'
08/25 20:42, 7F

08/25 20:43, , 8F
或著 sed -r 's/-[0-9.,_]+$//'
08/25 20:43, 8F

08/26 20:11, , 9F
這算是POSIX嗎?
08/26 20:11, 9F

09/02 01:48, , 10F
sed -r 's/(.*)-.*$/\1/'
09/02 01:48, 10F
文章代碼(AID): #1I5uILCt (Linux)