sedで正規表現に一致する最初の行セットのみを選択する方法は? [コピー]

sedで正規表現に一致する最初の行セットのみを選択する方法は? [コピー]

私に合うsedの次の正規表現があります。

cat <<EOF | sed -E '/^([A-Z][a-z]+){2,}$/Q'
Nothing Relevant
TotallyFake:

- NowWeWant
- TheseLines
- AndAlsoThisLine                                                                                                       

ButNotThisLine
- OrThisLine          
EOF

これは私たちが望む行だけを出力しますが、ヘッダー行も出力しますが、これはうまくいきません。だから周りを見回して/this/,/that/方法を見つけて、本当にカッコイイ!!と思いました。最初のPascalishCaseコンテンツを見つけて、最初の空白行で停止できます。

だから私はこれを試しました:

cat <<EOF | sed -En '/^- ([A-Z][a-z]+){2,}$/,/^$/p'

Nothing Relevant
TotallyFake:

- NowWeWant
- TheseLines
- AndAlsoThisLine

ButNotThisLine
- OrThisLine
EOF

ところで…それは私にそれを与えたOrThisLine。これは理想的ではありません。

- sedを使用してaで始まるPascalTextの最初のブロックを見つけて、その行だけを印刷するにはどうすればよいですか?

[編集する]

内容が十分に明確ではないので、私が望む結果は次のとおりです。

- NowWeWant
- TheseLines
- AndAlsoThisLine

私の理解は、最初の項目が見つかり、「this」の後の最初の項目に移動しますが、パターンが最初の空白行と一致せず、/this/,/that/EOFと一致するようです。thisthat^$

ベストアンサー1

これが次のYAMLファイルであるとします(配列要素のインデントはオプションです)。

---
Somesection:
Someothersection:
TotallyFake:
  - NowWeWant
  - TheseLines
  - AndAlsoThisLine

ButNotThisLine:
  - OrThisLine

TotallyFake...そして最上位配列の要素を取得したいと思います。

Mike Farah(Linuxで最も一般的に使用されている)を使用して、TotallyFake次のように最上位配列(YAML)を抽出できます。yqyq

$ yq '.TotallyFake' file
- NowWeWant
- TheseLines
- AndAlsoThisLine

配列内の要素を別の行として必要に応じて、TotallyFake最後に次を追加して配列を展開します。[]

$ yq '.TotallyFake[]' file
NowWeWant
TheseLines
AndAlsoThisLine

yqAndrey Kislyuk(よく知られているJSONプロセッサjqのラッパー)の対応するコマンドを使用してください。

$ yq -y '.TotallyFake' file
- NowWeWant
- TheseLines
- AndAlsoThisLine

ここでのオプションは、データをYAMLに抽出することを-y意味します。yqこれがなければ、JSONでエンコードされた配列(同等)が得られます["NowWeWant","TheseLines","AndAlsoThisLine"]

要素を別の行にインポートするには、次の手順を実行します。

$ yq -r '.TotallyFake[]' file
NowWeWant
TheseLines
AndAlsoThisLine

この-rオプションは、デコードされた(「生」)文字列を提供します。


を使用して、sed入力を構造化文書形式の文書ではなくテキストとして扱います。

$ sed -e '/^TotallyFake:/,/^$/!d' -e '//d' file
- NowWeWant
- TheseLines
- AndAlsoThisLine

これにより、関心のあるセクションの外側のすべての行が削除され、2番目のdコマンドを使用して実際の範囲の開始行と終了行が削除されます。空の正規表現は、sed最も最近一致した正規表現を再利用するように指示する特別な構文です。

この点に注意してください頼るTotallyFakeYAML文書のオプションのスペース(配列の最後の要素の後の空白行)。

おすすめ記事