首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash中变量的多个正则表达式替换?

bash中变量的多个正则表达式替换?
EN

Stack Overflow用户
提问于 2011-09-28 23:24:47
回答 2查看 8.8K关注 0票数 7

我想知道是否有一种方法可以在bash中用${string//substring/replacement}替换多个regexp,或者可能有更好的解决方案。

我有一个脚本来发送更新到statusnet和friendika与curl。例如,我在网上签署请愿书,有人邀请我在tweet上发布请愿书,但我更愿意发送给identica。我厌倦了粘贴东西和在终端中编辑来转义@和#,!然后呢?我想在我的脚本中使用regexp替换它们,以便自动更改

代码语言:javascript
复制
@repbunghole and @SenatorArsehat Stop farking around with #someship! Do you want me to come smack you? | http://someshort.url

代码语言:javascript
复制
\@repbunghole \@SenatorArsehat Stop farking around with \#someship\! Do you want me to come smack you\? \| http://someshort.url

我没有强大的sed或awk fu,但可以想象他们可能会提供解决方案,我不知道如何使用sed,除非将变量写入文件,读取文件并对其执行操作,然后使用var=$(cat文件)设置var。是。我在这方面是个新手。我找不到足够的数据来使用上面的${string//substring/replacement/}进行多次替换。运行X次来转义X个不同的字符似乎效率很低。

喜欢

代码语言:javascript
复制
read -p "Enter a string: " a
b=${a//\@/\\\@}
c=${b//\#/\\\#}
d=${c//\!/\\\!}
e=${d//\?/\\\?}
f=${e//\"/\\\"}
g=${f//\'/\\\'}

等等,等等,在此期间工作,但它是丑陋的…

EN

回答 2

Stack Overflow用户

发布于 2011-09-28 23:29:09

这就是character classes的用途:

代码语言:javascript
复制
b=${a//[@#!?"']/\\\0}
票数 8
EN

Stack Overflow用户

发布于 2011-09-29 05:29:46

用于“在bash中对变量进行多个正则表达式替换?”

sed和awk都可以做到这一点。例如,我想更换

代码语言:javascript
复制
a->1
b->2
c->3

使用sed

代码语言:javascript
复制
kent$  v=abc
kent$  newV=$(sed -e's/a/1/; s/b/2/; s/c/3/' <<< $v)
kent$  echo $newV2
123

使用awk

代码语言:javascript
复制
kent$  v=abc
kent$  newV2=$(awk '{gsub(/a/,"1");gsub(/b/,"2");gsub(/c/,"3")}1' <<< $v)                                                                
kent$  echo $newV                                                        
123
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7585564

复制
相关文章

相似问题

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