Linux Sed和换行符在php文件中添加许可证

时间:2016-11-11 13:13:42

标签: linux replace sed

为了向所有php文件添加许可证,我想通过以下方式更改<?php

<?php
/*
 * Copyright (c) 2016-2017 My Project
 * This file is part of My Project 1.2, more information at https://websitemyproject.com
 * Licence another line 
 * Last line of licence
 */

所以我在sed上测试了一个文件,第一行是许可证:

sed -i -- 's/<?php/<?php\n\/*\n * Copyright(c) 2016-2017 My Project \n *\/ /g' index.php

它有效,但它在文件index.php的每一行的末尾添加了一些^M,我不明白为什么。

<?php
/*
 * Copyright(c) 2016-2017 My Project
 */ ^M
^M
^M
$page = 'home';^M
^M

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您可以使用sed命令

插入s/\r//;来删除回车字符
sed -i -- 's/\r//;s/<?php/<?php\n\/*\n * Copyright(c) 2016-2017 My Project \n *\/ /g' index.php 

答案 1 :(得分:0)

您的文件有Windows行结尾(^M^J),您的sed命令正在输出Unix行结尾(^J),结果是两者的混合。

换句话说,它可能看起来,就像sed正在为每一行添加^M,但实际上那些^M字符已经存在。您的编辑器可能会自动检测行结尾,混合文件会产生混合结果。

您可以使用dos2unix之类的工具转换行结尾,或者您可以使用sed而不是\r\n告诉您的\n命令输出Windows样式行结尾}。