我想在下一行用#include <string>
替换所有#include <string>
后跟using namespace std;
。
如何在Solaris上使用sed获取几个文件?
例如,假设我有几个类似于下面的头文件:
....
#include <string>
....
我想将所有#include <string>
替换为#include <string>
和using namespace std;
,如下所示:
....
#include <string>
using namespace std;
....
答案 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\
的换行符后追加,并添加换行符。