1

如何执行多个 sed 命令?任何人都可以举一个语法的例子吗?

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

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

..进入:

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

谢谢你的帮助!

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

我有这 3 个命令:

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)

4

2 回答 2

1

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

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

这只是一个将所有 1 替换为 2 并删除所有空白链接file并将输出写入newfile.

于 2013-04-01T21:40:18.863 回答
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 PRODUCTIONor的行END PRODUCTION -->

如果是这样,那么在 awk 中,一种写法就是:

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

例如:

$ 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
于 2013-04-02T01:13:14.723 回答