
私の原文は
11 2 CDTZ - b00264ab
36 37 CDTB - c2330001
出力テキストを次のように表示したい
11 2 CDTZ - b0:02:64:ab
36 37 CDTB - c2:33:00:01
ハイフンの後に続く文字列では、2 文字ごとにコロンを追加する必要があります。
それを指示できる共通のテキスト処理コマンドはありますか?
- ハイフンの前(ハイフンを含む)のすべての文字列は変更されません。
- ハイフンの後の 2 文字ごとにコロンを挿入します。
一般的に、パターン (ここではハイフン) の前後のテキストを別々に処理する必要があります。
これまでの私の取り組み:
sed
私はおよびに関する基本的な知識を持っていますawk
。sed
内でを実行する方法があれば、 でフィールド区切り文字として (ハイフン)awk
を設定し、 で を実行してから、 を使用して行全体を印刷します。-
awk
sed 's/../&:/g;s/:$//'
$2
print $0
答え1
これを試して、
awk -v OFS='\t' '{gsub(/../,"&:",$NF); sub(/:$/,"",$NF);}1' file
11 2 CDTZ - b0:02:64:ab
36 37 CDTB - c2:33:00:01
gsub(/../,"&:",$NF)
:
各文字またはカップルに末尾を追加します。sub(/:$/,"",$NF)
:
前回追加された最後のフィールドの末尾の不要な部分を削除します。gsub
答え2
末尾の 16 進数が常に 8 文字であると仮定します。
$ sed 's/\(..\)\(..\)\(..\)\(..\)$/\1:\2:\3:\4/' file
11 2 CDTZ - b0:02:64:ab
36 37 CDTB - c2:33:00:01