2011-09-28 81 views
5

我想知道是否有办法在bash中使用 $ {string // substring/replacement}进行多个正则表达式替换,或者可能存在更好的解决方案。多个正则表达式替换变量在bash中?

我有一个脚本发送更新到curl的statusnet和friendika。例如,我在网上签署了请愿书,并提供给他们推特,但宁愿发送到身份证。我厌倦了粘贴东西,不得不在终端进行编辑以逃离@和#,!和? 我想正则表达式替换它们在我的脚本,自动将改变

@repbunghole and @SenatorArsehat Stop farking around with #someship! Do you want me to come smack you? | http://someshort.url 

​​

我没有强烈的awk或者sed福,但想像他们可能提供的解决方案,和我不不知道如何在不将变量写入文件的情况下使用sed,读取文件并对其执行操作,然后使用var = $(cat file)设置var。是。我对这件事很感兴趣。 我没有找到足够的数据与上面的$ {字符串// substring /替换/}多个替换。运行X次来逃避X个不同的字符似乎效率低下。

read -p "Enter a string: " a 
b=${a//\@/\\\@} 
c=${b//\#/\\\#} 
d=${c//\!/\\\!} 
e=${d//\?/\\\?} 
f=${e//\"/\\\"} 
g=${f//\'/\\\'} 

等等,等等。在此期间 工作,但它的丑陋......

回答

4

为“多正则表达式用bash替换变量?“

sed和awk都可以做到。 e.g我想更换

a->1 
b->2 
c->3 

sed的

kent$ v=abc 
kent$ newV=$(sed -e's/a/1/; s/b/2/; s/c/3/' <<< $v) 
kent$ echo $newV2 
123 

AWK

kent$ v=abc 
kent$ newV2=$(awk '{gsub(/a/,"1");gsub(/b/,"2");gsub(/c/,"3")}1' <<< $v)                 
kent$ echo $newV               
123