
私はネットリストを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 sed
perl
次の簡単な操作には許可されません。
sed -z 's/\n+//g' trail.txt