2017-01-05 15 views
-2

依存関係のあるファイルがあります。いくつかの依存関係はコメントになっています(#)。サブストリングcassandraが含まれている場合は、その行のコメントを外したいと思います。 ファイルがどのように見えるので、もし:Bash:行に指定された部分文字列が含まれている場合は、行の先頭から#を削除してください。

firstdependency>=2.0.7 # comment 
otherdependency>=0.8.9 # another comment 
#commenteddependency 
#cassandra-driver>=2.1.4,!=3.6.0 # Apache-2.0 
anotherdependency!=0.18.3,>=0.18.2 

私だけだから、行はサブcassandraが含まれているかどうかをチェックし、そうならば、かどうかを確認する必要があり

cassandra-driver>=2.1.4,!=3.6.0 # Apache-2.0 

に四行目を変更するスクリプトをしたいですその行の最初の文字は#に等しく、そうであれば、その行の最初の文字を削除します - DONE。私はそれをどうやって行うのか分かりません。助けて!

答えて

2

さて、あなたはsedで始まることを知っています。それはちょうど正しい置換コマンドの問題です。

sed -e "s/^#\(.*cassandra.*\)$/\1/" 

はラインは以下の規則に付着発見:

  1. #始まる、
  2. (文字の任意の配列が前と後の両方で許可されている)のどこかに "カサンドラ" を含む、

は、残りのすべての行(#を除く)をテンポラリ\1に保存します(\( ... \) do)、このような行を後者で置き換えるように指示されます。

必要に応じて、これはさらに改善することができます。 #の2回目の出現後に "cassandra"を探すのではありませんが、私はあなたの例のエンド・ライン・コメントがあなたによって追加され、問題にはならないと考えています。

出力例:AWKで

firstdependency>=2.0.7 # comment 
otherdependency>=0.8.9 # another comment 
#commenteddependency 
cassandra-driver>=2.1.4,!=3.6.0 # Apache-2.0 
anotherdependency!=0.18.3,>=0.18.2 
+1

@fedorquiありがとう、私はそれに気付き、あなたのコメントが来たときにただ編集を提出していた:-) –

+0

うまく!あなたは '^#\ /.* cassandra \)'と言うこともできます。とにかく印刷されるので、残りの部分をすべてキャプチャする必要はありません。実際、今、私はこれがgniourf^2のやり方だと思っています! – fedorqui

0

あなたのスクリプトはこの行だけ含まれている必要があります

sed -e 's/#cassandra/cassandra/' your_file 

正規表現の///はカサンドラ 『「による』別の、この場合の「#cassandraによって一つのパターンを置き換え

+1

正確な、申し訳ありません。ビーの答えははるかに良いです。 – Felandral

1
edとシンプル

。 、標準エディタ:

printf '%s\n' 'g/^#.*cassandra/s/^#/' w | ed -s file >/dev/null 

コマンドg/^#.*cassandra/マーク#で始まり、文字列を含むすべての行cassandraおよびs/^#/は、これらのマークされた行の先頭#を削除します。

1

。レコードが#で始まり、それにcassandraを持っている場合は、主要な#印刷のすべてのレコードを削除します。

$ awk '/^#/ && /cassandra/ { sub(/^#/,"") } 1' file 
firstdependency>=2.0.7 # comment 
otherdependency>=0.8.9 # another comment 
#commenteddependency 
cassandra-driver>=2.1.4,!=3.6.0 # Apache-2.0 
anotherdependency!=0.18.3,>=0.18.2 
関連する問題