特定の文字列の後に続く文字間の間隔を調整するには?

特定の文字列の後に続く文字間の間隔を調整するには?

大きなファイルがあります~/foo.txt。数千行のテーブル

SIZE : X  Y

ファイル全体に分散されており、 sum は整数Xです。Y私の問題は、時には整数が2つのスペースに分かれ、時には1つのスペースに分けられることXですY。間隔を一貫して作成するためにPerlスクリプトを作成したいと思います。可能であれば、2つのスペースを使用することをお勧めします。どうすればいいですか?

ベストアンサー1

整数だと言ったけど、正数を意味しているようだ。試すことができるおおよそのクイック回避策は次のとおりです。

sed 's/\([0-9]\+\)\s\+\([0-9]\+\)/\1  \2/g'

これには、2番目の数字がマイナス記号で始まる場合や空白がある場合など、いくつかの注意事項があります。いいえa53たとえば、次のような間に発生する状況を処理したいと思います27B。または望まない場合みんな数字は2つのスペースで区切られます。しかし、これはあなたが望むように修正することができる開始です。


質問をもう一度読んでみると、「圧縮」したいすべてのスペースが「SIZE」という単語で始まる行に特に現れるようです。これにより、状況がはるかに簡単になります。 「連続した空白の他のインスタンス」を保存したいと言われましたが、これが別の行にあるように聞こえます。したがって、この場合は以下を使用してください。

sed '/^SIZE/ s_\s\s\+_  _'

(代替テキストには2つのスペースがあります。)


もう一度読んでみると、今修正したい気がします。一つスペースは2つのスペースになります。これはその行の特定の形式によって異なりますが、次のように言いたいと思います。

sed '/^SIZE/ s_\s\+_  _3'

それは行わなければなりません。 (提供された例では機能します。)これ3を行うと、次の場合にのみ置換が発生します。3番目の場所マッチ\s\+- Chaosが説明したように、これは「1つ以上のスペースまたはタブ」を意味します。したがって、SIZE<space>:<space>X<space>YXとYの間のスペースを2つのスペースに置き換えます。

おすすめ記事