Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在solaris上使用sed将一行替换为两行_Sed_Newline_Solaris - Fatal编程技术网

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

在solaris上使用sed将一行替换为两行,sed,newline,solaris,Sed,Newline,Solaris,我想将所有出现的#include替换为#include,后跟使用名称空间std的在下一行。 我如何在Solaris上为几个文件使用sed 例如,假设我有两个类似于以下的头文件: .... #include <string> .... .... #include <string> using namespace std; .... $cat一些文件 /*代码*/ #包括 /*代码*/ $sed'/#使用名称空间std;包含/a'一些文件 /*代码*/ #包括 使用名称空

我想将所有出现的
#include
替换为
#include
,后跟使用名称空间std的
在下一行。
我如何在Solaris上为几个文件使用sed

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

....
#include <string>
....
....
#include <string>
using namespace std;
....
$cat一些文件
/*代码*/
#包括
/*代码*/
$sed'/#使用名称空间std;包含/a'一些文件
/*代码*/
#包括
使用名称空间std;
/*代码*/
解释:
/#include/
搜索“
#include
”,然后命令
a
a将显示字符串“
使用命名空间std;

另请参见。

sed'/#include/a\
使用名称空间std;
"档案"

在匹配项的换行符后追加\
,并添加带换行符的字符串。

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

$ sed '/#include <string>/a\
using namespace std;
' input-file > output-file
$sed'/#包含/a\
使用名称空间std;
'输入文件>输出文件
另一个选择是:

$ echo using namespace std; > tmp-file
$ sed '/#include <string>/rtmp-file' input-file > output-file
$echo使用名称空间std;>tmp文件
$sed'/#include/rtmp file'输入文件>输出文件

sed仅用于对单个行进行简单替换。对于任何其他内容,您都应该使用awk:

$ awk '{print} /#include <string>/{print "using namespace std;"}' file
....
#include <string>
using namespace std;
....
$awk'{print}/#include/{print“使用名称空间std;“}”文件
....
#包括
使用名称空间std;
....

除旧的、损坏的awk(Solaris上的/bin/awk)外,上述内容适用于所有系统上的所有awk。在Solaris上使用/usr/xpg4/bin/awk(一种几乎是POSIX的awk)或nawk(一种旧的、功能不太完善的awk)。

您的问题太模糊了。更准确地描述您想要做什么,并给出一个示例输入和所需输出。您是否尝试过将
xpg4
版本的
sed
放在其他版本之前?第二个选项:r在后面需要一个空格亲爱的“驾车经过”投票人-请注意解释投票结果,以便我可以改进我的答案?这个答案不可能是正确的改进(好吧,也许是……中的
1;/#,但这只是一种风格,有人可以合理地认为显式
{print}
更优越)。可能是有人认为,如果不是特定的工具,那么使用合适的工具是“错误的”。
$ echo using namespace std; > tmp-file
$ sed '/#include <string>/rtmp-file' input-file > output-file
$ awk '{print} /#include <string>/{print "using namespace std;"}' file
....
#include <string>
using namespace std;
....