sedを使用してパターンを含む行を置き換える

sedを使用してパターンを含む行を置き換える

sedを使用してパターンに一致する行の特定の文字を置き換える方法は?

例:文字で始まるすべての行を一致させ、末尾の改行をタブに置き換えたいと思います。私は以下を使用しようとしています:(sed -e '/^[A-Z]/s/\n/\t/g'私が興味のある行は役に立つならば常に文字で終わります)。

入力サンプル

NAME_A
12,1
NAME_B
21,2

サンプル出力

NAME_A    12,1
NAME_B    21,2

ベストアンサー1

sed '/^[[:alpha:]]/{$!N;s/\n/       /;}' <<\DATA
NAME_A
12,1
NAME_B
21,2
DATA

出力

NAME_A  12,1
NAME_B  21,2

文字で始まる行を処理し、次の行がある場合はドラッグして改行をタブに置き換えます。

ビットにはs/\n/<tab>/ここにリテラルタブが含まれていますが、一部のsはその場所でエスケープをサポートsedすることもできます。\t

再帰的なケースを処理するには、次のようにさらに強力にする必要があります。

sed '$!N;/^[[:alpha:]].*\n[^[:alpha:]]/s/\n/    /;P;D' <<\DATA
NAME_A
NAME_B
12,1  
NAME_C
21,2
DATA

出力

NAME_A
NAME_B  12,1
NAME_C  21,2

常にデータセットの前に1行ずつ移動します。ご覧のように、2行が順番に表示される場合は、^[[:alpha:]]改行文字を誤って置き換えません。

おすすめ記事