如何正确组合查找、sed 和 tr 以替换我所有文件中的换行符
How to correctly combine find, sed & tr to replace a newline in all my files
我的所有 PHP 个文件当前开始
<?php
declare(strict_types=1);
这是一个小事,但我想把它们都改成
<?php declare(strict_types=1);
我想我需要使用 tr,因为 sed 一次只在一行上工作。但是我想不出正确的命令来通过 .php 个文件的目录递归执行此操作。
谢谢!
您可以使用 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
我的所有 PHP 个文件当前开始
<?php
declare(strict_types=1);
这是一个小事,但我想把它们都改成
<?php declare(strict_types=1);
我想我需要使用 tr,因为 sed 一次只在一行上工作。但是我想不出正确的命令来通过 .php 个文件的目录递归执行此操作。
谢谢!
您可以使用 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