[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 7# GNGW


    可以这样理解:
一般来说,双引号一般会成对出现,被 "双引号对" 包裹的字符串,其中的特殊字符并不需要转义。
因为成对出现的双引号,本身就具有转义特殊字符的作用。比如 echo "a|b" 中的特殊字符不需要转义。
但暴露在 "双引号对" 之外的字符串,其中的特殊字符需要转义。

"s#(\"path\":\")[^^,]+(profiles\\\\extensions^|browser\\\\features)#\1%firefox:\=\\\\%\2#gi"

红色、蓝色分别是两组被双引号包裹的字符串,剩余的字符串都暴露在 "双引号对" 的外面,暴露在外边的特殊字符^和|都要转义。

TOP

顺便说下,顶楼脚本不知楼主从哪抄的,单从 sed 语法上讲,很多转义是多余的。
  1. sed -i -r "s#(jar:file:///)[^,]+(profiles/extensions|browser/features)/#\1%firefox:\=/%\2#gi" a.txt
复制代码
  1. sed -i -r "s#(\x22path\x22:\x22)[^,]+(profiles\\\\extensions|browser\\\\features)#\1%firefox:\=\\\\%\2#gi" a.txt
复制代码

TOP

回复 11# GNGW


    是谁告诉你双引号必须配对,不配对就一定不行的?
只要没有语法错误,能够通过预处理这一关,CMD 就认为是OK的,下一步该干啥干啥。

CMD 比你想像的要聪明得多,如果字符串结尾没有引号字符,它会认为结尾已经存在一个隐含的、且与之配对的引号字符,比如:
echo;a"b|c
与 echo;a"b|c" 一样,| 不需要转义。

如果字符串结尾有一个不配对的引号字符,与 echo;a"b|c 道理一样,只是把 b|c 去掉了。

一个建议:
想学批处理,先学会基本命令、基本语法,练好基本功;
只有掌握了基础,再来钻研这些个 "奇技淫巧",才不会感到吃力。
潘多拉的魔盒,需要有魔力的人才可能打开,CMD的预处理就是"魔盒",没有谁敢说已经彻底打开。
1

评分人数

TOP

返回列表