看板 Linux 關於我們 聯絡資訊
※ 引述《NOBUNAGA01 (0.0)》之銘言: : 標題: [問題] sed 取代問題求教 : 時間: Sat Nov 21 20:13:08 2020 : : : 原始文檔 : xxxxx(可忽略) : Current Frequency:2.412 GHz (Channel 3) : : 要抽出後面channel的數字 : "號稱"原本可行的語法 : sed -n 's/[ \\t]*Current Frequency:.*(Channel \\([0-9]*\\))/\\1/p' : 不過實際執行是no match 單引號 ' ' 內的反斜線不用跳脫 (escape) ,也就是不用連續兩個 這樣就會有結果了。 : 我在https://regex101.com/ 玩了一下 : 可行的抽出有兩種 : [ \\t]*Current Frequency:.*(Channel ([0-9]*))\) : 用\2 可以抽出3 : [ \\t]*Current Frequency:.*\(Channel ([0-9]*)\) : 用\1 就能抽出3 : 可是把上面兩個丟去GNU sed就掛了.... : https://sed.js.org/ : 輸入 : 's/[ \\t]*Current Frequency:.*\(Channel ([0-9]*)\) /\1/p' ^ 後面多了一個空白。 另外 sed / grep 預設是吃 basic regular expressions , 一般括號不用加反斜線跳脫,要做 match 用的括號才要加。 如果你覺得寫起來很煩,可以 sed / grep 加上 -E 改用 extended regex , 規則就反過來了。當然 basic / extended 還有其他的差異,有興趣可以自己查。 : 只會吐原始字串給我... : Current Frequency:2.412 GHz (Channel 3) : : 請問到底該怎麼取才對呢orz : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.243.105.139 (臺灣) : ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1605960791.A.05F.html : 推 Gold740716: 多一個反斜線 \([0-9]*\) 和 \1 就可以了 11/21 20:28 : 試出來這樣可以 但是反而看不懂了啊... : 's/[ \\t]*Current Frequency:.*Channel \([0-9]*\))/\1/p' : 如果只有一個右括弧的話得到結果是 3) : 為什麼多一個右括弧就會把結果的右括弧削掉.... 因為多的那個右括弧是對應文字,不是特殊功能,就跟你寫的 Channel 那些一樣都 被 match 到並取代掉了。 s/// 是取代的功能。 : ※ 編輯: NOBUNAGA01 (111.243.105.139 臺灣), 11/21/2020 21:17:18 : 推 Gold740716: 有二個括號就會匹配到第二個括弧,然後也取代 11/21 21:34 : 推 bitlife: 以下命令不知是否是你要的結果 ( <f> 為輸入檔) 11/21 22:10 : → bitlife: grep -o -e 'Channel [0-9]*' < <f> | grep -o -e '[0-9] 11/21 22:11 : → bitlife: *' 11/21 22:11 grep 後面參數可以直接是檔案名稱,不用用導向啦 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.30.76 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1606105753.A.75F.html
bitlife: 當時就注意力分散,熊熊就加了上去 XD 11/23 13:25