在solaris上使用sed将一行替换为两行

时间:2016-04-18 11:35:41

标签: sed newline solaris

我想在下一行用#include <string>替换所有#include <string>后跟using namespace std;。 如何在Solaris上使用sed获取几个文件?

例如,假设我有几个类似于下面的头文件:

....
#include <string>
....

我想将所有#include <string>替换为#include <string>using namespace std;,如下所示:

....
#include <string>
using namespace std;
....

4 个答案:

答案 0 :(得分:2)

可能最好的解决方案是使用/usr/xpg4/bin/sed,但是如果您想使用旧版本,请记住旧的sed非常特别关于换行符。您可能需要在sed命令中使用文字换行符。尝试:

$ sed '/#include <string>/a\
using namespace std;
' input-file > output-file

另一种选择是:

$ echo using namespace std; > tmp-file
$ sed '/#include <string>/rtmp-file' input-file > output-file

答案 1 :(得分:1)

sed用于单个行上的简单替换,即全部。对于其他任何你应该使用awk:

$ awk '{print} /#include <string>/{print "using namespace std;"}' file
....
#include <string>
using namespace std;
....

以上内容适用于所有系统上的所有awks,除了旧的,破坏的awk(Solaris上的/ bin / awk)。在Solaris上使用/ usr / xpg4 / bin / awk(几乎是POSIX awk)或nawk(较旧的,功能较少的awk)。

答案 2 :(得分:0)

$ cat some-file 
/* code code code */
#include <string>
/* code code code */

$ sed '/#include <string>/a using namespace std;' some-file 
/* code code code */
#include <string>
using namespace std;
/* code code code */

说明: /#include <string>/搜索“#include <string>”,然后命令a a 将字符串“{{1 }}”。

另见man sed

答案 3 :(得分:0)

sed '/#include <string>/a\
using namespace std;
' file

在匹配a\的换行符后追加,并添加换行符。