2 つの文字列間の grep/sed

2 つの文字列間の grep/sed

今このコードがあります。

cat -n rfile | sed -n '/"semantic_url":"/,/","/p'

ここで、rfile は大量のテキストを含むファイルです。私はそれぞれの間のすべてを抽出しようとしています

"semantic_url":"

(二重引用符と最後の二重引用符を含めてください。)

次のパターンはこんな感じです。

","

何が間違っているのかわかりません。私は長い間マンページを読んでGoogle検索をしながらこの仕事をしてきました。私は何が間違っていましたか?

ただ、これらのパターンの間に何があるかを返すことはできません。それは私にすべてを返しました。

例を入力してください。

"semantic_url":"number1","thisorthat"semantic_url":"number2","somecode"semantic_url":"number3","somemorecode

出力例

 number1, number2, number3

ベストアンサー1

sed -netP -e's/"semantic_url":"\([^"]*\)","/\n\1\n/;D' \
    -e:P  -e'P;D' <in >out

...問題の説明を理解している場合は、開いている引用符と閉じる引用符が同じ行にあり、間のビットが二重を含まない限り、区切り文字列"semantic_url":"","各出力行だけでなく印刷されます。引用符のペアで見つかった各ペアの間のすべて。

出力ラインを接続したい場合はこれを書くことができますが、他のものを追加する方が簡単かもしれませんsed

sed -netP -e's/"semantic_url":"\([^"]*\)","/\n \1\n/;D' \
    -e:P  -e'P;//!=;D' <in|\
sed -e'/^[^ ].*/!{H;d;}'   \
    -e's///;x;s/\n.//;s//,/g'

上記の入力を次のようにパイプしました。

"semantic_url":"number1","thisorthat"semantic_url":"number2","somecode"semantic_url":"number3","somemorecode
"semantic_url":"number4","thisorthat"semantic_url":"number5","somecode"semantic_url":"number6","somemorecode
"semantic_url":"number7","thisorthat"semantic_url":"number8","somecode"semantic_url":"number9","somemorecode

次のように印刷されました。

number1,number2,number3
number4,number5,number6
number7,number8,number9

おすすめ記事