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:]]
改行文字を誤って置き換えません。