开发者社区> 问答> 正文

linux下grep pattern的引号问题

我要grep /proc/meminfo 下以大小S开头的行

于是我写了
cat /proc/meminfo | grep ^(s|S)
cat /proc/meminfo | grep -E ^(s|S)

应该是可以匹配出来的 但是却不行
只有给pattern加引号过后才能匹配出来
cat /proc/meminfo | grep "^(s|S)"
cat /proc/meminfo | grep -E "^(s|S)"

这是为什么?
没有空白字符没有变量的情况下是不需要加引号的吧

展开
收起
a123456678 2016-06-23 15:04:17 2745 0
2 条回答
写回答
取消 提交回答
  • 什么都感兴趣?

    正则中shell中的特殊字符( ) | 如果不加引号,shell会它们当成特殊的字符(括号是子shell执行,| 是管道)

    如果加引号则是保持字符原有的含义(单个字符可以用反斜杠,多个字符用单引号或者双引号,双引号中的变量饮用会展开)

    2019-07-17 19:46:21
    赞同 展开评论 打赏
  • cat /proc/meminfo | grep ^(s|S)
    这句里的反斜杠只是告诉shell 让它不要当成特殊字符(比如|在shell里面是管道的含义,你不加反斜杠shell就会报错), 其实它最终就是要在文本中搜索 (s|S) 这个字符串. 你可以写个text 里面包含(s|S), 它会给你搜出来的.

    加上 "" 之后, 才是告诉 grep, (|) 这些是特殊字符, 你不要给我当普通字符去匹配.

    2019-07-17 19:46:21
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载