如何在触发“未终止替代模式”错误的bash脚本中重新组织sed正则
发布时间:2020-12-15 21:18:00 所属栏目:安全 来源:网络整理
导读:以下命令在bash中抛出未终止的替换模式错误: eval $(echo "sed '" "s,@("{a..u}{a..z}"),nn1,;" "'") 但不适合所有人. Linux显然运行良好. Mac抛出未终止的替代模式错误. 我怎样才能重组以使这项工作成功? 这是整个bash命令(目标是将当前的MySQL设置
以下命令在bash中抛出未终止的替换模式错误:
eval $(echo "sed '" "s,@("{a..u}{a..z}"),nn1,;" "'") 但不适合所有人. Linux显然运行良好. Mac抛出未终止的替代模式错误. 我怎样才能重组以使这项工作成功? 这是整个bash命令(目标是将当前的MySQL设置干净地输出到my.cnf): { # Print version,user,host and time echo -e "# MYSQL VARIABLES {{{1n##n# MYSQL ` mysql -V | sed 's,^.*(V.*),for.*,1,' ` - By: `logname`@`hostname -f` on `date +%c`n##" for l in {a..z}; do # Get mysql global variables starting with $l echo '#'; mysql -NBe "SHOW GLOBAL VARIABLES LIKE '${l}%'" | # Transorm it sed 's,t,^=,' | column -ts^ | tr "n" '@' | eval $(echo "sed '" "s,;" "'") | eval $(echo "sed '" "s,@(innodb_"{a..z}{a..z}"),;" "'") | tr '@' "n" | sed 's,^,#,g' done echo -e "#n##n# MYSQL VARIABLES }}}1"; } | tee ~/mysql-variables.log 解决方法
OS X中的默认sed是sed的BSD版本.刚测过:
>以上在OS X的默认sed中失败, 因此,可能BSD版本不处理这样的长替换命令序列. 您可以尝试使用下一个: eval $(echo "perl -ple '" "s,@("{a..u}{a..z}"),;" "'") 也许我不明白你的目标,但更简单的是什么是错的? sed 's/@([a-u][a-z])/nn1/' #or sed 's/@("[a-u][a-z]")/nn1/' 编辑 我再次专注于第一个代码行,而不是整个解决方案.因此创建了一个bash / perl版本,在OS X上没有问题(使用默认的OS X工具). 下一个代码 MYSQLCMD=/usr/local/mysql-5.6.16-osx10.7-x86_64/bin/mysql #your path to mysql command printf "# MYSQL VARIABLES {{{1n##n# MYSQL %s " "$($MYSQLCMD -V | sed 's/.*(Ver .*),.*/1/')" printf " - By: %s@%s on %sn" $(logname) $(hostname -f) "$(date +%c)" perl -e "$s=qx($MYSQLCMD -NBe 'SHOW GLOBAL VARIABLES');" -e 'for("aa".."uz"){$s=~s/^($_)/#n$1/m;$s=~s/^(innodb_$_)/#n$1/m};' -e '$s=~s/(.*)t(.*)/sprintf "# %-55s= %s",$1,$2/gem;print $s' printf "#n##n# MYSQL VARIABLES }}}1n"; 大致与原始代码完全相同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |