如何正确组合查找,sed& tr替换我所有文件中的换行

时间:2016-02-04 15:38:19

标签: bash sed tr

我的所有PHP文件目前都已启动

<?php
    declare(strict_types=1);

这是一件小事,但我想将它们全部改为

<?php declare(strict_types=1);

我认为我需要使用tr,因为sed一次只能在一行上运行。但我无法通过.php文件目录以递归方式执行此操作。

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以尝试使用GNU sed:

find . -name *.php -exec sed -i '1{N;s/<?php\s*\n\s*declare/<?php declare/}' {} \;

find位检索当前目录中的所有.php文件,sed位就地编辑它们以将匹配的两行定义更改为单行定义。

它假设php开始标记位于第一行,并查找以declare(和可选空格)开头的第二行。

如果您不使用GNU sed,则此命令应符合posix:

find . -name *.php -exec sed -i.bak '1{N;s/<?php[[:space:]]*\ 输入 [[:space:]]*declare/<?php declare/}' {} \;

然而,它还会创建.php文件的备份,一旦确定命令成功并使用其他查找,就可以删除它:

find . -name *.php.bak -delete