使用 sed 替换
发布于 2024-11-08 07:25:35 字数 250 浏览 0 评论 0 原文

我试图以编程方式在一堆文件中将 替换为 ,但我的 sed 正则表达式的行为并不像我预期的那样。你能告诉我这是怎么回事吗?

我在这里的命令行上测试它:

$ sed -e 's/<\?/<\?php/g'
<?
<?php?<?php
d
<?phpd<?php

I'm trying to programmatically replace <? with <?php in a bunch of file, but my sed regex isn't behaving like I expected. Can you tell me what's wrong with it?

I'm testing it on the command line here:

$ sed -e 's/<\?/<\?php/g'
<?
<?php?<?php
d
<?phpd<?php

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

尸血腥色 2024-11-15 07:25:35

我认为你不需要 ?: 上的转义

sed -e 's/<?/<?php/g'

I don't think you need the escapes on the ?:

sed -e 's/<?/<?php/g'
独自唱情﹋歌 2024-11-15 07:25:35

您不需要在替换中转义反向引用。

sed 's#<\?#<?php#'

在管道中,纠正双倍 php:

sed 's#<\?#<?php#g' | sed 's#phpphp#php#g'

You don't need to escape the back reference in the replacement.

sed 's#<\?#<?php#'

In a pipe, to correct for doubling the php:

sed 's#<\?#<?php#g' | sed 's#phpphp#php#g'
像你 2024-11-15 07:25:35

您真的必须使用 sed,还是也可以使用 perl?

perl -pi.tmp -e 's,^<\?(?!php),<?php,' *.php *.inc
rm *.tmp

我使用负前瞻以避免在文件已经以正确字符开头的情况下生成

Do you really have to use sed, or can you use perl as well?

perl -pi.tmp -e 's,^<\?(?!php),<?php,' *.php *.inc
rm *.tmp

I am using a negative look-ahead to avoid generating <?phpphp in cases where the files already start with the correct characters.

烟─花易冷 2024-11-15 07:25:35

这也将跳过与 的匹配:

sed -e 's/<?\([^=p]\)/<?php\1/g' -e 's/<?$/<?php/g'

This will also skip matching with <?=$variable:

sed -e 's/<?\([^=p]\)/<?php\1/g' -e 's/<?$/<?php/g'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文