是否有人知道如何删除模式" @TechCrunch:"在Linux中的SED中,在以下str中?
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]* //'
使用 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。
您已经接近了 - 只是缺少:
。
perl -pe 's/@w*:s//i'
或sed
:
sed -e 's/@[a-z]: //i'
:
与[a-zA-Z]
不匹配。另外,无需支持空间。
sed 's/@[a-zA-Z]*: //'