我想知道是否有办法在bash中进行多个正则表达式替换 $ {string // substring / replacement}或者可能存在更好的解决方案。
我有一个脚本通过curl向statusnet和friendika发送更新。 例如,我在网上签署请愿书,并且我可以发送推文,但宁愿发送到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 var = $(cat文件)。是。我对这个东西很陌生。 我没有找到足够的数据与上面的$ {string // substring / replacement /}进行多次替换。运行X次以逃避X个不同的字符似乎效率低下。
像
read -p "Enter a string: " a
b=${a//\@/\\\@}
c=${b//\#/\\\#}
d=${c//\!/\\\!}
e=${d//\?/\\\?}
f=${e//\"/\\\"}
g=${f//\'/\\\'}
等等等
在此期间工作,但它很难看......
答案 0 :(得分:7)
这就是character classes的用途:
b=${a//[@#!?"']/\\\0}
答案 1 :(得分:4)
用于“在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
123