多くの場合、左の自動インデントではなく、同様の行構造に基づいてコードをソートしたいと思います。このようなことができるスクリプトはありますか?以下は私がやりたいことの例です。一方:
self.colorOfBackground =? colorOfBackground
self.colorOfLineForTime =? colorOfLineForTime
self.marginOnBottom =? marginOnBottom
self.marginOnTop =? marginOnTop
...
スクリプトを実行し、タブの各「列」をソートしてソートし、視覚的に簡単に解析したいと思います。
self.colorOfBackground =? colorOfBackground
self.colorOfLineForTime =? colorOfLineForTime
self.marginOnBottom =? marginOnBottom
self.marginOnTop =? marginOnTop
...
私はPerlやPython、AWK、または他のスクリプト言語がこれを行うことができると思いましたが、残念ながら、私はこれらについてあまり知りません。これまで、私はVimとVimの正規表現ベースの代替機能を使用してきましたが、まだほとんどの時間を手動で列間隔を指定するのに費やしています。
答え1
これにより、期待される結果が得られます。
ファイル.txt:
self.colorOfBackground =? colorOfBackground
self.colorOfLineForTime =? colorOfLineForTime
self.marginOnBottom =? marginOnBottom
self.marginOnTop =? marginOnTop
次のコマンドを使用する場合:
sed 's/^[[:blank:]]*//' File.txt | column -t -s " "
このコマンドは先行スペースを削除します。sed 's/^[[:blank:]]*//'
このスタックオーバーフローの質問を参照して、このコマンドが実際にスタックオーバーフローで実行する操作を例とともに詳細に説明します。ここをクリック
通事論: column -t [-s separator] [filename] -> column -t -s " "
-t:内容をテーブル形式で表示するためのパラメータ
-s: 特定の区切り文字に基づいてコンテンツを区切ります。
コマンド出力:
self.colorOfBackground =? colorOfBackground
self.colorOfLineForTime =? colorOfLineForTime
self.marginOnBottom =? marginOnBottom
self.marginOnTop =? marginOnTop
上記のコマンドを使用して使用したデータを並べ替える前に、ファイルのデータ全体を左揃えにする必要があります。sed 's/^[[:blank:]]*//'
答え2
答えを受け入れても、コマンドに接続せずに、またはawk
コマンドsed
を使用して目的の結果を得ることができます。column
awk '{print $1"\t\t"$2"\t\t"$3}' column.txt
sed -e 's/^[[:blank:]]*//' -e 's|\s|\t\t|g' column.txt
このsed
コマンドは、最初に各行の先頭からすべてのスペースを削除し、残りのスペースを2つのタブに変換します。次の出力が提供されます。
self.colorOfBackground =? colorOfBackground
self.colorOfLineForTime =? colorOfLineForTime
self.marginOnBottom =? marginOnBottom
self.marginOnTop =? marginOnTop
このawk
コマンドは、最初の列、つまりで始まる文字列、self
2つのタブ、2番目の列、つまり=?
他の2つのタブ、最後に3番目の列の文字列のみを印刷します。
self.colorOfBackground =? colorOfBackground
self.colorOfLineForTime =? colorOfLineForTime
self.marginOnBottom =? marginOnBottom
self.marginOnTop =? marginOnTop
ファイルを標準出力に送信するのではなく、ファイル自体を編集するには、次のいずれかのコマンドを使用します。
sed -i -e 's/^[[:blank:]]*//' -e 's|\s|\t\t|g' column.txt
awk -i inplace '{print $1"\t\t"$2"\t\t"$3}' column.txt
このコマンドを実行するには、スイッチをawk
使用するにはバージョン4.2以降が必要です。-i inplace
答え3
必要なものは次のとおりです。
$ column -t file
self.colorOfBackground =? colorOfBackground
self.colorOfLineForTime =? colorOfLineForTime
self.marginOnBottom =? marginOnBottom
self.marginOnTop =? marginOnTop
または必要に応じて:
$ column -t -o' ' file
self.colorOfBackground =? colorOfBackground
self.colorOfLineForTime =? colorOfLineForTime
self.marginOnBottom =? marginOnBottom
self.marginOnTop =? marginOnTop
$ column -t -o$'\t' file
self.colorOfBackground =? colorOfBackground
self.colorOfLineForTime =? colorOfLineForTime
self.marginOnBottom =? marginOnBottom
self.marginOnTop =? marginOnTop
$ column -t -o$'\t\t' file
self.colorOfBackground =? colorOfBackground
self.colorOfLineForTime =? colorOfLineForTime
self.marginOnBottom =? marginOnBottom
self.marginOnTop =? marginOnTop
column
引数を適切に調整してください。