Re: [問題] sed 取代問題求教
※ 引述《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
→
11/23 13:25,
4年前
, 1F
11/23 13:25, 1F
討論串 (同標題文章)
Linux 近期熱門文章
23
129
PTT數位生活區 即時熱門文章