sed バックスペースと交換

sed バックスペースと交換

私はネットリストをtrail.txt含むを持っています。spice今、すべての拡張パラメータを1行に置き換えたいと思います。つまり、+その行を削除して前の行に追加します。

トレース.txt

data
+ net06706 net06707
+ net221 net222 net223 
m1 net10 rwl vdda vss nch l="l1pg+0.005u" w=w1pg+0.105u 
m0 vdda rwld net10 vss nch l="l1pg+0.005u" w=w1pg+0.105u 

(必須)trail.txt

data net06706 net06707 net221 net222 net223 
m1 net10 rwl vdda vss nch l="l1pg+0.005u" w=w1pg+0.105u 
m0 vdda rwld net10 vss nch l="l1pg+0.005u" w=w1pg+0.105u 

注文する

sed -e 's/^+/\b/g' trail.txt

交換しようとしましたが、成功しませんでした+backspaceこの問題を解決する他の方法はありますか?別の選択肢がありますか?

答え1

バックスペースメソッドは利用できないようですが、次のことができます。

sed -e :a -e '$!N;s/\n+/ /;ta' -e 'P;D' trail.txt

バラより有名なSedの専門用語の説明、パート1:ファイル間隔、番号付け、テキスト変換および置換40. 前の行が等号「=」で始まる場合は、前の行の後に行を追加します。(明らかに置き換えられる+=

答え2

FWIW、GNUawk

awk -vRS='\\n\\+?' '{ORS=RT == "\n+"? "":RT; print}' trail.txt
data net06706 net06707 net221 net222 net223
m1 net10 rwl vdda vss nch l="l1pg+0.005u" w=w1pg+0.105u
m0 vdda rwld net10 vss nch l="l1pg+0.005u" w=w1pg+0.105u

答え3

sedの使用は少しトリッキーかもしれないので、いくつかのアイデアがあります。

perl -00 -pe 's/\n\+\s*/ /g' file
awk '
    {
        if (/^\+/) 
            sub(/^\+[[:blank:]]*/, " ", $0)
        else 
            if (NR > 1) print ""
        printf "%s", $0
    } 
    END {print ""}
' file 

答え4

GNU sedperl次の簡単な操作には許可されません。

sed -z 's/\n+//g' trail.txt

関連情報