2017-01-26 4 views
0

を追加し、私は、ファイルがconfig.propertiesと呼ばれる持って、次のテキストが含まれている:はsedの:同じ試合で試合を交換し、さらにテキスト

猫は

​​

をconfig.propertiesをし、私の目標は維持しています同じデータが追加されています。私はこのために使用してきたコマンドがある

猫のconfig.properties

// a lot of data 
com.enterprise.project.AERO_CARRIERS = LA|LP|XL|4M|LU|4C|JJ|PZ 
//more data 

sed 's/\(com\.enterprise\.project\.AERO_CARRIERS\s*\=\s*.+\)/\1\|JJ\|PZ/g' config.properties 
この例では、私は、この変数 |JJ|PZ結果の割り当てに追加します

しかし、これは動作しません。 私は何が間違っていますか?ジャストインプレース検索や交換のためにUNIX -daysからネイティブテキストエディタedを使用し、sedのようなストリーム・エディタを使用する別の方法として

+0

それは私のために働く。 sedは '\ s'をサポートしていないかもしれません - 代わりに' [[:blank:]] 'を試してください。 –

+2

ああ待って、私は嘘をついていた、それは動作しませんでした。 '。+'はsedの基本正規表現にはありません。 '。*'や '。\ +'(BREのGNU拡張子)や 'sed -r'(GNU)や' sed -E'(BSD sed)のいずれかを使う必要があります。 –

+0

ありがとう!!エラーは '。+'の代わりに '。+'を使用していました。 –

答えて

1

。使用オプション(-sは)に準拠しPOSIX、パターンを含む行のための移植性にそれほど問題なく、

printf '%s\n' ",g/com.enterprise.project.AERO_CARRIERS/ s/$/\|JJ\|PZ/g" w q | ed -s -- inputFile 

一部,g/com.enterprise.project.AERO_CARRIERS/検索で、一部s/$/\|JJ\|PZ/gは、その行の最後に|JJ|PZを追加し、w q書き込みと節約しますそのファイルをインプレースに置き換えます。

+1

Nitpick:移植性は、ツールのさまざまな実装のPOSIX準拠に依存します。単なるPOSIX仕様の存在は、移植性を保証しません。POSIX仕様で定義された機能を使用し、ツールが準拠していない場合、私は移植性の問題を抱えています。 –

+0

@BenjaminW:本当に感謝しています。私が見たPOSIXコンプライアンスの文言はすべて、口語的なものになりました。それを明確にしてくれてありがとう!今言い直して! – Inian

0

\s+ POSIXに準拠していません。

  • あなたは[[:space:]][[:blank:]]と(改行を含む)空白文字とスペースとタブを一致させることができます。

  • .+.\{1,\}または..*

に置き換えることができますそして、あなたはあなたのパターンに一致する出力ラインに代わり&を使用し、ここで後方参照を使用する必要はありません。

sed 's/^com\.enterprise\.project\.AERO_CARRIERS[[:blank:]]*=[[:blank:]]*.\{1,\}/&|JJ|PZ/' 
0

することができます最初に一致する:

sed '/com\.enterprise\.project\.AERO_CARRIERS\s*\=\s*.\+/ s/$/|JJ|PZ/g' config.properties