regex - sed 用于用 ""替换特殊字符

标签 regex linux parsing sed

我尝试像这样解析 terraform output 的输出:

terraform output -json all_admins |
sed -e "s/,/;\n/g" -e "s/^(\[|\])//g"
terraform output -json all_admins

导致:

["<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4a2b2e2723247b0a2b2e27232464292527" rel="noreferrer noopener nofollow">[email protected]</a>","<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3d5c595054530f7d5c59505453135e5250" rel="noreferrer noopener nofollow">[email protected]</a>"]

当前结果:

terraform output -json all_admins |
sed -e "s/,/;\n/g" -e "s/^(\[|\])//g"

导致:

["<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2f4e4b4246411e6f4e4b424641014c4042" rel="noreferrer noopener nofollow">[email protected]</a>";
"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2342474e4a4d116342474e4a4d0d404c4e" rel="noreferrer noopener nofollow">[email protected]</a>"]

预期结果:

"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7110151c181f403110151c181f5f121e1c" rel="noreferrer noopener nofollow">[email protected]</a>";
"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e180858c888fd3a180858c888fcf828e8c" rel="noreferrer noopener nofollow">[email protected]</a>"

如何使用 sed 中的正则表达式优雅地摆脱 []

最佳答案

您可以使用:

terraform output -json all_admins | sed 's/[][]//g; s/,/;\
/g'

# Example:
s='["<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="355451585c5b04755451585c5b1b565a58" rel="noreferrer noopener nofollow">[email protected]</a>","<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="09686d6460673b49686d646067276a6664" rel="noreferrer noopener nofollow">[email protected]</a>"]'
echo "$s" | sed 's/[][]//g; s/,/;\
/g'

"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4223262f2b2c730223262f2b2c6c212d2f" rel="noreferrer noopener nofollow">[email protected]</a>";
"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="debfbab3b7b0ec9ebfbab3b7b0f0bdb1b3" rel="noreferrer noopener nofollow">[email protected]</a>"

确保未转义的 ] 放置在括号位置 [...] 内的第一个位置,接下来是 [

请注意,sed 's/[][]//g' file 相当于 sed -E 's/\]|\[//g' file >

关于regex - sed 用于用 ""替换特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66625107/

相关文章:

获取带有 URL 的字符串的 Javascript 函数

linux - 在 Bash 变量中转义 awk 参数

parsing - 使用 ocamllex/ocamlyacc 解析部分语法

正则表达式帮助 - 1 个案例我需要处理

regex - 为什么空格分隔而不是 FPAT

java - regex\\p{So} 不过滤 BLACK CIRCLE FOR RECORD

linux - 如何将我的密码更改为符号链接(symbolic link)目录的真实路径?

php - 从后台进程启动后台进程

c++ - boost-spirit 解析器 lex->qi : Getting the "undocumented" on_success mechanism to work

matlab - inputParser 验证参数未按预期运行