2016-12-20 22 views
-1

私は私のファイルにprospectors:sedの:-e式#1、CHAR 62:不明なコマンド: `」

- 
    paths: 
    - /var/log/consumer.log 
    document_type: consumer 
    input_type: log 

を追加しようとしています。私は、コマンドを使用しています:

sed -i '/prospectors:/a\ \ \ \ \- 
\ \ \ \ \ \ paths:\ 
\ \ \ \ \ \ \- \/var\/log\/consumer.log 
\ \ \ \ \ \ document_type: consumer 
\ \ \ \ \ \ input_type: log' new.txt 

をしかし、上記のコマンドは次のエラーを与える:

sed: -e expression #1, char 62: unknown command: `\'

どのように私は希望を達成することができますか?クラシック(POSIX)sedにおいて

答えて

1

aコマンドの後に独自の行にする必要があるが付加データ、及びデータが続くことを示す終了時に、最後の必要性バックスラッシュを除くすべての行の各行。 GNU sedは、aコマンドと同じ行にある情報を許可しますが、それ以外の場合はルールに従います。

さらにシワがあります。sedは、データから先行する空白を削除します。先頭の空白を取得するには、最初にバックスラッシュを空白にすることができます。したがって

、あなたがで終わることができます。先頭の空白は無視されます

sed -i '/prospectors:/a \ 
     \ -\ 
     \  paths:\ 
     \  - /var/log/consumer.log\ 
     \  document_type: consumer\ 
     \  input_type: log' new.txt 

。バックスラッシュは削除されます。次の空白が出力にコピーされます。したがってprospectors:を含むだけの行を含む入力を与え、出力は次のようになります。もちろん

prospectors: 
    - 
     paths: 
     - /var/log/consumer.log 
     document_type: consumer 
     input_type: log 

、あなたが自分に合うように間隔を調整することができます。

BSD sedは、-iオプションの後に接尾辞が必要です。それは-i ''で、 '空の文字列'の接尾辞を得ることができます。 GNUとBSDの間で移植できるようにするには、-i.bak(スペースなし; GNU sedはスペースが嫌いです; BSD sedは添付されたサフィックスを受け入れますが、空のサフィックスを付けることはできません)。 -iオプションは、POSIXでは必須ではないため、すべてのUnixライクなシステムで利用できるわけではありません。 GNU sedだけを使用している場合、このトリビアについて心配する必要はありません。

関連する問題