2つの言語で同じ行数を持つ2つの並列ファイルがあり、これら2つのファイルを区切り文字で1行ずつマージする予定|||です。たとえば、2つのファイルは次のとおりです。 ファイルA: 1Mo 1,1 I love you. 1Mo 1,2 I like you. Hi 1,3 I am hungry. Hi 1,4 I am foolish. ファイルB: 1Mo 1,1 Ich liebe dich. 1Mo 1,2 Ich mag dich. Hi 1,3 Ich habe Durst. Hi 1,4 Ich bin neu. 予想される出力は次のとおりです。 1Mo 1,1 I love you. ||| …
sedGNUと同様にBSDと互換性を持ちたいsedの代替コマンドがありますsed。この場合、拡張正規表現は必要ないため、拡張正規表現は問題になりません。私の主な問題は、2つsedのsが置換文字列の文字エスケープシーケンスを解釈する方法の違いです。私の置換文字列にはタブと改行が含まれており、メンテナンスを容易にするためにコマンド文字列に表示したいのですが、BSD sedはエスケープシーケンスを解釈せず、GNU sed はそうします。sedBSDでこれらのエスケープシーケンスを解釈するように指示する適切な方法は何ですか?次の2つのスニペットは、私の問題を要約しています。 GNU sed echo ABC | sed 's/B/\n\tB\n' eil A B C BSD sed echo ABC | sed 's/B\n\tB\n' 利回り AntBnC 明らかに、\nそして\tBSDによってエスケープシーケンスとして解釈されていませんsed さて、私の質問に。BSD sedマンページによると: 置換文字列に改行文字を指定するには、その前にバックスラッシュを付けます。 これは、リテラルの改行の前にバックスラッシュを付ける必要があることを意味していますか?置換テキストのsedよう\nにエスケープシーケンスを解釈するよう指示する適切な方法は何ですか?
sedを使用して構成ファイルを編集しようとしています。変更したい行がいくつかあります。Linux sed -iでは、インプレース編集が可能ですが、バックアップファイルに保存する必要があります。ただし、複数のバックアップファイルを持つことを避け、すべてのインプレース変更を一度に行いたいと思います。 それを行う方法sed -iはありますか、またはより良い代替手段がありますか?