作者wens (文思)
看板Linux
标题Re: [问题] sed 取代问题求教
时间Mon Nov 23 12:29:11 2020
※ 引述《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://webptt.com/cn.aspx?n=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://webptt.com/cn.aspx?n=bbs/Linux/M.1606105753.A.75F.html
1F:→ bitlife: 当时就注意力分散,熊熊就加了上去 XD 11/23 13:25