正则表达式 – 在unix / linux上的grep:如何替换或捕获文本?
发布时间:2020-12-13 19:09:49 所属栏目:Linux 来源:网络整理
导读:所以我对正则表达式非常好,但是我在unix上遇到了一些问题.以下是我想知道如何做的两件事: 1)替换除字母,数字和下划线之外的所有文本 在PHP中我会这样做:(效果很好) preg_replace('#[^a-zA-Z0-9_]#','',$text). 在bash中我试过这个(成效有限);好像它不允许你
所以我对正则表达式非常好,但是我在unix上遇到了一些问题.以下是我想知道如何做的两件事: 1)替换除字母,数字和下划线之外的所有文本 在PHP中我会这样做:(效果很好) preg_replace('#[^a-zA-Z0-9_]#','',$text). 在bash中我试过这个(成效有限);好像它不允许你使用全套正则表达式: text="my #1 example!" ${text/[^a-zA-Z0-9_]/'') 我用sed尝试了它,但它似乎仍然有完整的正则表达集的问题: echo "my #1 example!" | sed s/[^a-zA-Z0-9_]// 我确定有一种方法可以用grep来做,但是当我尝试时它将它分成多行: echo abc!@#$%^&;*(222 | grep -Eos '[a-zA-Z0-9_]+' 最后我也尝试使用expr,但似乎对扩展正则表达式的支持非常有限…… 2)捕获(多个)文本部分 在PHP中我可以做这样的事情: preg_match('#(word1).*(word2)#',$text,$matches); 我不确定在* nix中怎么可能…… 最佳答案
第1部分
你几乎就在那里,sed只需添加g修饰符,以便替换发生在全球,没有g,替换只会发生一次.
您的bash模式替换也犯了同样的错误:不全局替换:
第2部分 捕获在sed中的工作方式与在PHP的正则表达式中相同:将模式括在括号中捕获:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |