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

あなたはこの例を挙げました:

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」を取得し、 and を含む行の間および行を含むブロックを<!-- BEGIN DEVELOPMENT -->削除し、 or/<!-- END DEVELOPMENT -->のいずれかを含む<!-- BEGIN PRODUCTION行を削除することだと思いますEND PRODUCTION -->

もしそうなら、 awk でそれを書く1つの方法はちょうどです:

/<!-- 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 に答える