【问题标题】:sed ack search / replace line break with stringsed ack 搜索/用字符串替换换行符
【发布时间】:2021-06-21 16:08:19
【问题描述】:

我查看了一些 SO 线程,但没有一个对我的具体情况有所帮助。

我正在尝试将我从 php 5.6 接管到 php 8.0 的 PHP 应用程序更新为 php 8.0

话虽如此,有很多实例看起来像:

<?
echo ...
function

我需要找到所有&lt;? 后面直接跟一个换行符
的情况,并将其替换为&lt;?php(newline)

根据我读过的 SO 帖子 .. 我认为我即将接近以下内容:

find ./ -type f -readable -writable -exec sed -i ":a;N;$!ba;s/\<\?\n/\<\?php\n/g" {} \;

我想我很接近了.. 但我不明白为什么它不能用&lt;?php\n 替换&lt;?\n,因为sed 语句在没有换行符的情况下工作。但是根据THIS POST,看起来我做得对。

我做错了什么?

我尝试过的迭代:

$ find ./ -type f -readable -writable -exec sed -i ":a;N;$!ba;s/\<\?\n/\<\?php\n/g" {} \;

$ find ./ -type f -readable -writable -exec sed -i ":a;N;$!ba;s/<\?\n/<\?php\n/g" {} \;

$ find ./ -type f -readable -writable -exec sed -i ":a;N;$!ba;s/<?\n/<?php\n/g" {} \;

$ find ./ -type f -readable -writable -exec sed -i ":a;N;$!ba;s/<?\n\r/<?php\n/g" {} \;

$ find ./ -type f -readable -writable -exec sed -i ":a;N;$!ba;s/<?\r\n/<?php\n/g" {} \;

【问题讨论】:

    标签: linux sed replace


    【解决方案1】:

    sed 命令本身可以很简单:

    sed -i 's/<?$/<?php/'
    

    将它与 find 结合起来,它可能对你有用。

    $ 是匹配行尾的锚点,您可以考虑使用^ 也将匹配锚点到开头:

    s/^<?$/<?php/ 
    

    【讨论】:

    • 正是我要找的 --> find ./ -type f -readable -writable -exec sed -i 's/^&lt;?$/&lt;?php/' {} \; 工作.. 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 2020-03-13
    • 2011-08-16
    相关资源
    最近更新 更多