perl - Perl使用通配符替换文件中的字符串
问题描述
我是 Perl 的新手,正在尝试使用通配符替换文本文件中的一行。示例文件:
This is a text file.
我的工作(非通配符)示例:
file=/home/test.user/test.txt
perl -pi -e 's/This is a text file./'"This is a modified text file."'/g' $file
现在尝试使用通配符进行编辑:
perl -pi -e 's/This*/'"This is a modified text file."'/g' $file
这是不正确的,并输出:
This is a modified text file. is a text file.
如何使用通配符搜索/This*/
?
解决方案
Perls///
使用正则表达式模式来匹配目标,而不是 shell glob 字符串。
而不是*
,尝试.*
这样:
perl -pi -e 's/This.*/'"This is a modified text file."'/g' $file
.*
匹配零或除换行符LF
或. 之外的任何字符的出现"\n"
。
小心,因为它会匹配字符串中任何位置的子字符串。所以这个字符串:
If This is a text file
将成为这个字符串:
If This is a modified text file
因此,如果你想匹配行首,那么使用一个锚点 ^
,它坚持模式的其余部分必须在字符串的开头匹配
perl -pi -e 's/^This.*/'"This is a modified text file."'/g' $file
推荐阅读
- powershell - 如何通过使用带有 powershell 的 Octopus deploy 来触发 Jenkins 作业?
- vue.js - 如何编辑 vue-loader 以支持音频文件?
- python - 将 Python 中的 PSD 图旋转 90 度 - 第 2 部分
- excel - 有没有办法将 iframe 嵌入到 Teams 聊天/对话中?
- command-line - 如何使用 Miller 命令行工具删除 csv 文件中的空白行?
- vue.js - Vuepress - 如何仅在特定页面上的 head 标签中添加自定义 html?
- python - 我在哪里可以找到 geckodriver 选项类的参数?
- googletest - 谷歌测试和模拟类的适当设计以减少冗余
- sql - 使用 SQL 调用 SSIS 包而不使用作业并指定 SSIS 包将作为谁运行
- angular - 角度对话框不适用于材质对话框内容