Tclでは一重引用符を使用しません。 Tclの等価は中括弧です(適切なネストを除く)。また、読んでいるファイルとは別のファイルに書き込む必要があります。あるいは、さまざまなビットが読み込み用にファイルを開いてファイルを消去する書き込みのために、いくつかの難しい競合条件が発生します。 (後で名前を変更することができます)。このようなものはうまくいくはずです。
私は強く、純粋のTcl(長いが、今ポータブル)でこれを行うために誘惑されるだろう、と述べた
exec sed -r {2,$s/(.{55})/\1\n\t/g} $formatfileName | sed {s/ $//} > $formatfileName.new
file rename -force $formatfileName.new $formatfileName
:
set f [open $formatfileName]
set lines [split [read $f] "\n"]
close $f
set f [open $formatfileName "w"]
foreach line $lines {
# First line is special
if {[incr LN] == 1} {
puts $f [string trimright $line]
continue
}
foreach l [split [regsub {.{55} } $line "&\n\t"] "\n"] {
puts $f [string trimright $l]
}
}
close $f
string trimright
sが効果的に二sed
が何をしていたかやっています、途中のregsub
は最初のsed
とよく似ていますが、内側にsplit
を使用していますので、トリミングを一貫して適用することができます。
ここには厄介なものはありませんfile rename
;読み取りは書き込みの前にあります。
また、 'sed'は複数のパターンを渡してコマンドラインに適用することができます。パイプは必要ありません。 –
Donal Fellowsに感謝します。中括弧で修正されたLinuxの部分は、魅力的なものです。 Tclコードをありがとう、それはLinuxコードに非常に近いです。私は、ニーズを満たすためにいくつかの変更を行うことを学ぶことを試みています。 – NewCoder
ブラッド・ラナムに感謝しました。 – NewCoder