ファイルがあります:
"p1"data
"p2"data
"p3"data
"p1"data
"p2"data
"p3"data
"p2"data
"p3"data
"p1"data
次の「p1」が表示されるまで、すべての行を「p1」にリンクしたいと思います。
"p1"data"p2"data"p3"data
"p1"data"p2"data"p3"data"p2"data"p3"data
"p1"data
引用は文字通りの引用です。数千行の「p2」および「p3」入力ファイルセットが1〜10個ある場合があります。出力ファイルの長さは約600行でなければなりません。
試してみましたsed -e'/^"p1/N;s/\n//'
が、何度も実行する必要があり、最終的に「p1」を他の「p1」と関連付けました。
どんな助けでも大変感謝します。ちなみに、このファイルはXMLファイルからのものです。 XMLツールがあることを知っていますがsed
。
ベストアンサー1
に基づいてこれ、GNUの使用(sed
環境で利用可能なものがないと仮定):$POSIXLY_CORRECT
sed ':a;N;/\n"p1"/!s/\n//;ta;P;D' file
標準sed
構文では、分岐ラベルの後にコメントを付けることはできず、N
最後の行で実行するとパターンスペースが削除されるため、次のようにする必要があります。
sed -e :a -e '$!N;/\n"p1"/!s/\n//;ta' -e 'P;D' file
追加コメント:
sed '
# Label to jump to:
:a
# Append next line to pattern space unless we are
# on the last line:
$!N
# If the newline is NOT followed by "p1", append
# the line by replacing the newline with a space:
/\n"p1"/!s/\n//
# If we changed something, jump to label:
ta
# Print part until newline
P
# Delete part until newline
D' file