パターンがある場合は、検索して行全体を置き換えます。それ以外の場合は、SED コマンドを使用して別のパターンの後に新しい行を挿入します。

パターンがある場合は、検索して行全体を置き換えます。それ以外の場合は、SED コマンドを使用して別のパターンの後に新しい行を挿入します。

使用しない非常に単純な1行のSEDコマンドを作成しようとしていますbash conditions

同様の操作を実行し、ファイルの末尾に追加するSEDコマンドの場合は、次のようにします。

sed -n -e '/.*MYLINE.*/!p' -e '$aVAR=MYLINE' -i /path/to/file

ただし、今回は行が挿入される場所が重要であるため、特定の文字列の後に配置する必要があります。私は以下を試しました:

sed -n -e '/.*MYLINE.*/!p' -e t -i '/^ANOTHER_PATTERN.*/aVAR=MYLINE' /path/to/file

だから私は/path/to/fileこれからピボットすることができます

...
ANOTHER_PATTERN=SOMETHING
...

またはこれ

...
ANOTHER_PATTERN=SOMETHING
VAR=OTHERS MYLINE
...

これを作り出すために

...
ANOTHER_PATTERN=SOMETHING
VAR=MYLINE
...

しかし、期待した結果は得られませんでした。インターネットを検索しようとしましたが、役に立ちませんでした。

パターンがある場合は正しく検索し、行全体を置き換える方法、それ以外の場合はSEDを使用して別のパターンの後に新しい行を挿入する方法は?

ベストアンサー1

sed -e '/MYLINE/d' -e '/^ANOTHER_PATTERN/a\
VAR=MYLINE' file

行にパターンが含まれている場合、パターンは削除され、パターンで始まる行にその行が追加されMYLINEます。ファイルをその場で編集するオプションを追加します(実装でサポートされている場合).VAR=MYLINEANOTHER_PATTERN-ised

おすすめ記事