Sedはパターンを一致させた後にテキストを追加します。

Sedはパターンを一致させた後にテキストを追加します。

パターンがあります。

62G   57G  52% 

私はそれらを別の行に入れたいです。
最初の一致G Free以降、
2番目のUsed以降
、3番目のUtilized以降

だから、次のようにする必要があります

62G Free 
57G Used  
52% Utilised 

ベストアンサー1

データがというファイルにあると仮定すると、file次のコマンドはそのファイルの各行を読み取り、指定した形式で3つの列を出力します。

$ awk '{ printf("%s Free\n%s Used\n%s Utilised\n", $1, $2, $3) }' file
62G Free
57G Used
52% Utilised

各入力行に対してコードのブロックが実行されます。ブロックには、スペースprintf()で区切られた3つの列を3つの行にフォーマットし、テキストを追加するステートメントが含まれています。

そうすることは不可能ではありませんが、sed不必要に難しいです。

$ sed -e 's/[[:blank:]][[:blank:]]*/:/g' -e 's/:/ Free@/' -e 's/:/ Used@/' -e 's/%/% Utilised/' -e 'y/@/\n/' file
62G Free
57G Used
52% Utilised

まず、すべての空白文字を単一の文字に圧縮してから、:これらの文字を1つずつ置き換えて、必要な追加のテキスト文字列を挿入します。挿入時に後で改行を挿入する文字:も追加します。@最後のステップで挿入されたすべての@文字を改行文字に変更します。

コマンドの代替部分に使用sedできるGNUを使用すると、コマンドを短くすることができます。\ns///

$ gsed -E -e 's/[[:blank:]]+/:/g' -e 's/:/ Free\n/' -e 's/:/ Used\n/' -e 's/%/% Utilised/' file
62G Free
57G Used
52% Utilised

どちらのソリューションも文字列で一時的な「プレースホルダ文字」としてsed使用でき、これらの文字は文字列の他の場所には表示されないという事実に依存します。:@

おすすめ記事