首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模式匹配在Linux下的Bash实现

模式匹配在Linux下的Bash实现
EN

Stack Overflow用户
提问于 2015-05-14 00:03:17
回答 3查看 61关注 0票数 0

有谁知道如何在Linux中通过sed删除下面字符串中的模式"@TechCrunch:“?

代码语言:javascript
复制
str="0,RT @TechCrunch: The Tyranny Of Government And Our Duty Of Confidentiality As Bloggers."

因此,期望的输出将是:

代码语言:javascript
复制
"0,RT The Tyranny Of Government And Our Duty Of Confidentiality As Bloggers."

我试过很多方法,但都没成功,例如:

代码语言:javascript
复制
echo $str | sed 's/@[a-zA-Z]*\ //'
EN

回答 3

Stack Overflow用户

发布于 2015-05-14 00:16:26

对于外壳变量中已经存在的一行,使用sed (或任何其他外部工具)效率低得可怕。让shell自己进行替换要容易得多。

代码语言:javascript
复制
#!/bin/bash
#      ^- must be /bin/bash, not /bin/sh, for extglobs to be available

shopt -s extglob # put this somewhere early in your script to enable extended globs

str="0,RT @TechCrunch: The Tyranny Of Government And Our Duty Of Confidentiality As Bloggers."
echo "${str//@+([[:alpha:]]): /}"

它使用extglob语法通过内置的外壳模式匹配提供更强大的模式匹配;+(foo)是等同于正则表达式形式(foo)+的extglob。

票数 2
EN

Stack Overflow用户

发布于 2015-05-14 00:08:12

你差一点就成功了-只是错过了:

代码语言:javascript
复制
perl -pe 's/@\w*:\s//i'

或在sed

代码语言:javascript
复制
sed -e 's/@[a-z]: //i'
票数 1
EN

Stack Overflow用户

发布于 2015-05-14 00:09:39

[a-zA-Z]:不匹配。而且,没有必要对空格进行反斜杠。

代码语言:javascript
复制
sed 's/@[a-zA-Z]*: //'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30220005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档