shell 怎么将变量中的特殊字符替换掉

2020-10-30 17:26:43 +08:00
 awanganddong

用 shell 脚本写一个日志的监控脚本给钉钉

变量里边的一些特殊字符需要替换掉。比如单引号,双引号,大括号等

按照$(var/被替换字符 /替换字符) 一直不成功

所以想要个 demo

另外感觉用 shell 写比 python 写麻烦的多

大家觉得呢

2085 次点击
所在节点    程序员
16 条回复
weixiangzhe
2020-10-30 17:35:26 +08:00
sed awk 了解一下,大部分有 shell 的环境都有 python 吧,那就改成 python 呗
codehz
2020-10-30 17:36:42 +08:00
你括号错了
webshe11
2020-10-30 17:39:15 +08:00
麻烦的话还是改 Python 好使,易读又严谨
ai277014717
2020-10-30 17:53:59 +08:00
很难找到能覆盖 100%case 的 printf 试试吧
ai277014717
2020-10-30 17:55:14 +08:00
我试过用 ruby 来做
`printf '%s\n' "$VAR" | ruby -e "require 'json'; puts JSON.dump(ARGF.read)" | tr -d '\n'`
codehz
2020-10-30 17:57:20 +08:00
特殊符号用斜杠转义,其他的不变
${var/\'/2333}
awanganddong
2020-10-30 18:43:36 +08:00
这是我写的
将变量 messageStr 变量里边的单引号和双引号转化为 0
然而失败了

${messageStr/\'\"/0}

蛋蛋忧伤
jfcherng
2020-10-30 19:06:22 +08:00
https://tldp.org/LDP/abs/html/parameter-substitution.html

${var/Pattern/Replacement}
First match of Pattern, within var replaced with Replacement.

If Replacement is omitted, then the first match of Pattern is replaced by nothing, that is, deleted.

${var//Pattern/Replacement}
Global replacement. All matches of Pattern, within var replaced with Replacement.

As above, if Replacement is omitted, then all occurrences of Pattern are replaced by nothing, that is, deleted.
somalia
2020-10-30 19:32:25 +08:00
我之前也要替换成 '*' ,放弃 shell 用了 python
misaka19000
2020-10-30 19:36:12 +08:00
换 Python 写
awanganddong
2020-10-30 21:08:50 +08:00
@jfcherng 看了文档,特殊字符还是没转化为 a

```
myDate=`date "+%Y-%m-%d %R"`
message=`less 'laravel.log'|grep 'local.ERROR'|grep "${myDate}"`
messageStr=""
for line in $message
do
messageStr="$messageStr$line"
done
if [ $messageStr ];then
messageStr=${messageStr//\'\"/a}
echo $messageStr;
curl 'https://oapi.dingtalk.com/robot/send?access_token=token'\
-H "Content-type: application/json"\
-X POST \
-d '{"msgtype": "text","text": {"content": "'$messageStr'"},"isAtAll": true}'
fi

```
jfcherng
2020-10-30 21:15:26 +08:00
因為你根本用錯啊... Pattern 不是 char list...

[Clover@Clover-NB Desktop]$ src="x'\"y"
[Clover@Clover-NB Desktop]$ echo ${src//[\'\"]/a}
xaay
awanganddong
2020-10-30 21:28:39 +08:00
@jfcherng 感谢感谢

另外提个问题,[] 这个不太懂,我看文档上边也没体现
jfcherng
2020-10-30 21:31:41 +08:00
就只是一般的 regex

看到 pattern 通常不是 regex 就是能只能頂多用 wildcard (*)
awanganddong
2020-10-30 21:41:31 +08:00
技术扎实,属于大牛级别。
jfcherng
2020-10-30 21:48:11 +08:00
@awanganddong #15 謝謝你 今晚可以開心入眠了, 不過 regex 是很常見的東西 :)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/720267

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX