多个SED命令?

时间:2013-04-01 21:34:58

标签: shell unix sed

如何进行多个sed命令?任何人都可以举例说明语法吗?

例如,我将如何组合这些:

sed <SOMETHING> > file.txt
sed <SOMETHING_ELSE> > file.txt

..成:

sed <SOMETHING>,<SOMETHING_ELSE> > file.txt

感谢您的帮助!

我将澄清这个问题以给出一个真实世界的例子:

我有这三个命令:

sed '/<!-- BEGIN DEVELOPMENT -->/,/<!-- END DEVELOPMENT -->/d'  > app/editor/index2.php
sed '/<!-- BEGIN PRODUCTION/d' app/editor/index.php > app/editor/index2.php
sed '/END PRODUCTION -->/d' app/editor/index.php > app/editor/index2.php

我需要运行这3个命令,并根据原始文件(index.php)生成1个输出文件(index2.php)

2 个答案:

答案 0 :(得分:1)

我不确定这与javascript有什么关系,但一种方法是使用分号,如下所示:

sed 's/1/2/g;/^ *$/d' file > newfile

这只是一个用2s替换所有1的示例,并删除file中的所有空白链接并将输出写入newfile

答案 1 :(得分:1)

你举了这个例子:

sed '/<!-- BEGIN DEVELOPMENT -->/,/<!-- END DEVELOPMENT -->/d' > app/editor/index2.php
sed '/<!-- BEGIN PRODUCTION/d' app/editor/index.php > app/editor/index2.php
sed '/END PRODUCTION -->/d' app/editor/index.php > app/editor/index2.php

我认为您真正要做的是获取文件“index.php”并删除包含<!-- BEGIN DEVELOPMENT -->/<!-- END DEVELOPMENT -->的行之间的所有块,并删除包含的任何行<!-- BEGIN PRODUCTIONEND PRODUCTION -->

如果是这样,那么以awk的一种方式来写这只是:

/<!-- BEGIN PRODUCTION|END PRODUCTION -->/  { next }
/<!-- (BEGIN|END) DEVELOPMENT -->/ { skip = !skip; next }
!skip

e.g:

$ cat file
abc
<!-- BEGIN DEVELOPMENT -->
def
<!-- END DEVELOPMENT -->
ghi
<!-- BEGIN PRODUCTION
klm
END PRODUCTION -->
nop
$
$ cat tst.awk
/<!-- BEGIN PRODUCTION|END PRODUCTION -->/  { next }
/<!-- (BEGIN|END) DEVELOPMENT -->/ { skip = !skip; next }
!skip
$
$ awk -f tst.awk file
abc
ghi
klm
nop