見つけた素晴らしい答えに基づいてここsed
、使用するスクリプトファイルでこれらのコマンドのいくつかを試してみましたsed -f
。ファイルに複数のsed
コマンドがあり、問題なく実行され続けます。これで、ファイルの末尾に次の2行を追加する必要があります。
/^$/{N;s/^$\nbegin of this/begin/g}
/^$/{N;s/^$\nend of this/end/g}
デフォルトでは、空行(^$
)の後にbegin of this
orフレーズが続くことを検索したend of this
後、空行を削除してbegin
次の行をorに置き換えますend
。
各コマンドは問題なく独立して実行されますが、スクリプトファイルに配置すると問題が発生します。前のコマンドの一部が動作を停止しました(例:s/\\ \\ //g
文字列の削除\ \
)。さらに重要なことは、最初の2行のコマンドのうち最初のコマンドのみが実行されることです。なぜですか?いくつかのコマンドラインスイッチがありませんかsed
?同じスクリプトファイルに複数行のコマンドを使用できますか?
追加の「ポイント」として、2つの正規表現行をキャプチャグループに置き換えたいという誘惑を受けましたが、それも/^$/{N;s/^$\n(begin|end) of this/\1/g}
機能せず、コマンドラインから直接実行することもできません。
perl
私はORを使用しないので、比較的シンプルで実行可能な解決策があることを願っています。awk
しかし、これが独自の制限であるsed
場合、または実装するのが非常に複雑な場合(非常に間違いなく)、代替策を使用します。
以下は非常に基本的なサンプルテキストです。
some text
begin of this
some more text
end of this
A sentence
Another sentence
結果は次のとおりです。
some text
begin
some more text
end
A sentence
Another sentence
答え1
@seshoumaraがこの問題を解決したと思います。そうですか?とにかく私はこれを考えました。
sed -r '/^$/{N; s/\n(begin|end) of this/\1/g}' file