今天,我了解了如何使用Perl在一个或多个文件中进行搜索和替换。例如,我可以这样做:
perl -i -p -e "s/Sydney/Moscow/g" cities.txt
Run Code Online (Sandbox Code Playgroud)
...,然后完成操作,city.txt将被就地修改,这样字符串“ Sydney”的所有实例都将被“ Moscow”替换。
很好,但是我想更多地控制:特别是,我希望搜索和替换操作仅在以字符串“ HomeCities:”开头的行上发生
例如,如果在运行命令之前,city.txt看起来像这样:
HomeCities: Dublin, Sydney, Los Angeles, Chicago
AwayCities: New York, Melbourne, Sydney, Oakland
Run Code Online (Sandbox Code Playgroud)
...然后在命令完成后,将如下所示:
HomeCities: Dublin, Moscow, Los Angeles, Chicago
AwayCities: New York, Melbourne, Sydney, Oakland
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以编写带有明确的每行for循环和每行逻辑的脚本或程序呢?
你已经快到了:
perl -i -p -e "s/Sydney/Moscow/g if /^HomeCities:/" cities.txt
Run Code Online (Sandbox Code Playgroud)
编辑添加:
顺便说一句,如果文件可能包含名称中包含“悉尼”作为子字符串的城市,例如。“Sydneyville”或其他东西,并且您不想将其更改为“Moscowville”,您可以收紧正则表达式以仅适用于完整的单词:
perl -i -p -e "s/\bSydney\b/Moscow/g if /^HomeCities:/" cities.txt
Run Code Online (Sandbox Code Playgroud)
您可以添加一条if语句:
perl -i -p -e "s/Sydney/Moscow/g if /^HomeCities/" cities.txt
Run Code Online (Sandbox Code Playgroud)
(请注意,在“ cities.txt”文件中,“悉尼”的拼写错误,因此将不会进行替换)
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |