如何进行多个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)
答案 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 PRODUCTION
或END 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