有人知道如何删除模式" @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]*\ //'
答案 0 :(得分:2)
将sed
(或任何其他外部工具)用于shell变量中已经存在的单行是非常低效的。更容易让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语法通过内置shell模式匹配提供更强大的模式匹配; +(foo)
是与正则表达式(foo)+
等效的extglob。
答案 1 :(得分:1)
你很接近 - 只是错过了:
。
perl -pe 's/@\w*:\s//i'
或sed
:
sed -e 's/@[a-z]: //i'
答案 2 :(得分:0)
:
与[a-zA-Z]
不匹配。此外,没有必要反斜杠空间。
sed 's/@[a-zA-Z]*: //'