今このコードがあります。
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