正規表現

正規表現

tcshスクリプトに '\ n'で区切られ、内部にスペースがある可能性がある文のリストがあります。 lsスタイルで表示したいので、「echo $list | column」を実行しました。色を使わないときに効果的です。結果は次のとおりです。 色を使用しない場合に必要な形式です。

その後、毎回変更されるいくつかの項目(最新の3つの選択肢)を強調表示する必要があります。強調表示したい項目の周りにカラーシーケンス(\ e [33 mと¥ e [0 m)を追加し、それを$ listに入れます。 "echo $list|column" と表示すると、色は大丈夫ですが、下の画像に示すようにテキストは整列しません。色を追加した後に並べ替えられない

'|column'を使用せずに試しましたが、文字列が私が望むスタイルではない場合でも、1列に正しく表示されることに注意してください。

問題に対する解決策はありますか?

ところで検索を少ししてみると、その列にバグがあるようです。この列に管理者がいますか?問題をどこに報告する必要がありますか?

注: 読みました。列コマンドとカラーエスケープコードに関する問題投稿する前に。彼の形式は固定されていますが、私のカラープロジェクトは動的です。したがって、単にprintfを使用するか、列の後ろに色を追加しても機能しません。

ベストアンサー1

出力に色を割り当てるエスケープシーケンスは理解されず、column入力から「印刷可能文字」を計算しなければ理解されません。たとえば、テキストを緑色()に置き換えるシーケンスには、^[[0;32m印刷可能な6つの文字が含まれており、そのように計算されます。

column列の幅を決定したときに実際に表示される内容を確認するには、次の手順を試してください。

ls --color=always / | tr -dc '\n -~' | column -s '\n'

このオプションをサポートしていない場合は、ls --color=always /すべてのコマンドをカラー出力に置き換えてください。ls

columnこれらのエスケープシーケンスを無視する説得力はありませんが、後で色を追加できます。

to-list次のようなファイルがあるとしましょう。

1: avifsc01
2: avifsh01_bg4dtva0f
3: avifsh01_bg5dtvz1f
4: bg2ctqz1
5: bg2dtva0
6: bg3cda0
7: bg3cda1
8: bg3cdpa0
9: bg3z1
10: bg4cdpa0f
11: bg4cdpz1f
12: bg4cdz1f
13: bg4cta0f
14: bg4ctpa0f
15: bg4ctpz1f
16: bg4ctz1f
17: bg4dtva0f
18: bg4dtvz1f
19: bg5ctpz1f
20: bg5ctz1f
21: bg5dtvz1f
22: bg6ctz1f
23: bgpk01
24: dsc
25: test
26: vpp01
27: vrdlib01

その後、次のことができます。

list=$(cat to-list)

特定のアイテムに色を付けたいとしましょう。

to_color='bg3cda0 bg4dtva0f bg6ctz1f'

columnリストを着色する前に書式を設定できます。

printf '%s\n' "${list}"                         \
| column -s '\n'                                \
| sed "s@$( (printf '%s\\|' ${to_color}; echo)  \
            | sed 's@^@\\([0-9][0-9]*: \\(@'    \
            | sed 's@\\|$@\\)\\)@'              \
       )@$(printf '\033')[33m\1$(printf '\033')[0m@g"

${list}2つの変数(および)を生成する方法がある限り、${to_color}これらの項目は動的に生成できます。

結果:

カラー出力

おすすめ記事