我想知道是否有一种方法可以在bash中用${string//substring/replacement}替换多个regexp,或者可能有更好的解决方案。
我有一个脚本来发送更新到statusnet和friendika与curl。例如,我在网上签署请愿书,有人邀请我在tweet上发布请愿书,但我更愿意发送给identica。我厌倦了粘贴东西和在终端中编辑来转义@和#,!然后呢?我想在我的脚本中使用regexp替换它们,以便自动更改
@repbunghole and @SenatorArsehat Stop farking around with #someship! Do you want me to come smack you? | http://someshort.url至
\@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个不同的字符似乎效率很低。
喜欢
read -p "Enter a string: " a
b=${a//\@/\\\@}
c=${b//\#/\\\#}
d=${c//\!/\\\!}
e=${d//\?/\\\?}
f=${e//\"/\\\"}
g=${f//\'/\\\'}等等,等等,在此期间工作,但它是丑陋的…
发布于 2011-09-28 23:29:09
这就是character classes的用途:
b=${a//[@#!?"']/\\\0}发布于 2011-09-29 05:29:46
用于“在bash中对变量进行多个正则表达式替换?”
sed和awk都可以做到这一点。例如,我想更换
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
123https://stackoverflow.com/questions/7585564
复制相似问题