ファイル.txt
String1?
word1
word2
word3
word4
String2?
word5
word6
word7
word8
希望の出力:
String1?
word1 | word2
word3 | word4
String2?
word5 | word6
word7 | word8
私が試した唯一のパターンはlineです/?$/
。
sed '/\?$/{n;:l N;/\?$/b; :a; N; $!b a; s/\n\s\{1,\}/ | /g; bl}'
しかし、それはうまくいきませんでした。私の現在の作業ソリューション:
sed '/\?$/{:a;N;/\n....-..-.. /!s/\n/ - /;ta;P;D}' | sed 's/^[- ]*//g;s/[ -]*$//g'
...しかし、回避策であり、非常に遅い速度です。パイプなしのシングルライナーとクイックソリューションで役立つ人はいますか?
パターンのように空白行がなく、,$\|^$
^$が存在せず、?$を含む他の行がある場合は、どのように?$から貪欲でない最初の?$パターンまでバッファを保存し、最後のAllを除いて印刷できますか? ? 1行だけ検索し、最後の行を次のパターンバッファとマージして検索しますか?
ベストアンサー1
GNU sed専用です。
ブロックのすべての行に正確に2つの列がある場合(あなたの場合):
sed '/?$\|^$/b;N;s/\n/ | /' File.txt
奇妙なコンテンツが可能な場合(一般的な方法):
sed '/?$\|^$/b;N;/\n$/!s/\n/ | /' File.txt