2016-11-09 4 views
-1

私は以下の内容のテキストファイルを持っています。シェルスクリプトでテキストファイルを解析し、リスト内の値を抽出します

NewFile1.txt 
     Targets: 
      target1 
      target2 
      target3 
      ....... 

     Build Configurations: 
      config1 
      config2 
      config3 
      ....... 

     Schemes: 
      schemeName1 
      schemeName2 
      schemeName3 
      ........... 
      ........... 

私は、ファイルを解析し、すべてのスキームを抽出し、リストに入れたいです。 このシェルスクリプトはどのようにして実現できますか?

+0

'grep'、' awk'、 'sed'、' perl'など、たくさんのツールがあります。[Here](https://regex101.com/r/ni1Pdg/1)はあなたが望むものを多かれ少なかれ達成したサンプル正規表現は、自由に遊んでみてください。現時点では、お試しいただいたコードは表示されていませんでしたし、使用していたツールについて教えてもらえませんでした。あなたの質問を編集して詳細を追加するのをためらってください。 – Aserre

+0

質問を編集して[これまでに試したこと](http://whathaveyoutried.com)を表示してください。問題のあるコードの[mcve]を含める必要があります。次に、特定の問題を解決するために役立つことができます。 [ask]も読んでください。 –

答えて

0

ここでは、awkを使用した1行のソリューションです。

awk 'p && NF {print;} /Schemes:/ {p=1}' NewFile1.txt 
schemeName1 
schemeName2 
schemeName3 

pls。 "awk vs sed"をネットで見てみると、ほとんどの状況でawkがsedではなくより便利になることがわかります。

+0

ありがとうLaszlo。これはクールだと思われる。 –

0

schemeNameXリストの後に改行があるだろうと仮定すると:

sed -n '/Schemes:/,/^$/p' 

-nフラグが暗黙の出力を無効にしますので、我々は唯一の範囲で印刷するsedを指定することができます。範囲の始まりは/Schemes:/で定義され、このテキストは行のどこかに表示され、範囲の末尾は/^$/で定義され、行が空であることをテストします。

Schemes:行と末尾改行も返されます。これはheadtailで簡単に破棄できます。

+0

ありがとうアーロン。これは私が必要ですが、どのように私はスキームを削除するために頭と尾を使用することができます:と最後の行。私はスクリプトを書くのが初めてです。 –

+0

'tail -n + 2'で最初の行を削除し、' head -n -1'で最後の行を削除することができます。また、1つのコマンドでそれを行う方法があるかもしれないので、おそらくあなたは少し速く私の答えを受け入れました:)別のより良い答えが来たら、あなたの心を変えるのをためらってください! – Aaron

関連する問題