有谁知道如何在Linux中通过sed删除下面字符串中的模式"@TechCrunch:“?
str="0,RT @TechCrunch: The Tyranny Of Government And Our Duty Of Confidentiality As Bloggers."因此,期望的输出将是:
"0,RT The Tyranny Of Government And Our Duty Of Confidentiality As Bloggers."我试过很多方法,但都没成功,例如:
echo $str | sed 's/@[a-zA-Z]*\ //'发布于 2015-05-14 00:16:26
对于外壳变量中已经存在的一行,使用sed (或任何其他外部工具)效率低得可怕。让shell自己进行替换要容易得多。
#!/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。
发布于 2015-05-14 00:08:12
你差一点就成功了-只是错过了:。
perl -pe 's/@\w*:\s//i'或在sed中
sed -e 's/@[a-z]: //i'发布于 2015-05-14 00:09:39
[a-zA-Z]与:不匹配。而且,没有必要对空格进行反斜杠。
sed 's/@[a-zA-Z]*: //'https://stackoverflow.com/questions/30220005
复制相似问题