regex - 在特定引用的字符串中交换反斜杠的模式
问题描述
我正在使用 sed(实际上是 ssed 扩展的“-r”,因此我可以访问我可能需要的大多数正则表达式功能)来处理文件,其中一个更改是将双反斜杠字符转换为引号字符串内的单个正斜杠。问题是不应该转换一些包含双反斜杠的引用字符串。我要定位的所有带引号的字符串在引号内都有一个特定的单词“myPhrase”。
因此,对于具有这两行的文件:
"\\\\server\\dir\\myPhrase\\subdir"
"Don't change \\something me!"
输出将是:
"//server/dir/myPhrase/subdir"
"Don't change \\something me!"
我在搜索模式中尝试了各种前瞻组合,例如 (?=myPhrase),它找到所需的引用块并将捕获组 (\\) 替换为 / 作为替换,但我所有的尝试要么只替换第一次出现双反斜杠,或 myPhrase 左侧的反斜杠等。
我确信有一些前瞻/非捕获/递归的组合可以做到这一点,但我现在完全空白。
解决方案
试试这个 Perl 解决方案
perl -pe ' s{"(.+)?"}{$x=$1; if($x=~m/myPhrase/ ) {$x=~s!\\\\!/!g};sprintf("\x22%s\x22",$x)}ge ' file
使用以下输入
$ cat ykdvd.txt
"\\\\server\\dir\\myPhrase\\subdir"
"Don't change \\something me!"
Another line
$ perl -pe ' s{"(.+)?"}{$x=$1; if($x=~m/myPhrase/ ) {$x=~s!\\\\!/!g};sprintf("\x22%s\x22",$x)}ge ' ykdvd.txt
"//server/dir/myPhrase/subdir"
"Don't change \\something me!"
Another line
$
推荐阅读
- php - 在 laravel 刀片中显示树结构
- css - 正元素是相对于页面的,而不是父 React 组件
- react-native - 样式 React Native 开关组件
- python - 如何用单个变量替换列表中的所有元素
- apache-spark - 为什么 spark 中的“收集”动作会触发数据收集到驱动程序?
- amazon-web-services - 尝试创建连接 AWS 胶水时 AWS CDK 访问被拒绝
- javascript - 如何将此值设置为变量?
- c++ - 如何将不同类型的对象保存到单个文件中并根据需要读取它们?
- java - 使用 apache pdfbox 生成 pdf 时跨多个页面的动态表
- python - 无法通过前端注册。一直说错误的请求