sedを使って改行だけの行、ファイル内の空行を削除したり その他の改行の操作をする
ファイル内の空行を削除
sed.exe -e "/^$/d" input.txt > output.txt
コマンドの説明
/^$/d
: 空行(行の開始と終了の間に何もない行)を削除します。^$
: 空行を示す正規表現。d
: 削除(delete)を意味します。
テキストファイル内の改行をカンマに変換し、「…」が見つかった場合、その後に改行を追加
sed.exe -e ":loop" -e "N" -e "$!bloop" -e "s/\n/,/g" -e "s/…/…\n/g" y:\out1.txt > y:\out.txt
コマンドの説明
-e ":loop"
: ラベルloop
を作成します。-e "N"
: 次の行を現在のパターン空間に追加します。-e "$!bloop"
: ファイルの最後の行でない限り、ラベルloop
に戻ります。-e "s/\n/,/g"
: 改行をカンマに置き換えます。-e "s/…/…\n/g"
: 「…」を見つけた場合、その後に改行を追加します。
実行例
例えば、y:\out1.txt
に以下のような内容があるとします:
行1
行2
行3…行4
このコマンドを実行すると、y:\out.txt
には以下のような出力が得られます:
行1,行2,行3…
行4
各行の末尾にキャリッジリターン(\r
)を追加
正規表現でCRLF(キャリッジリターン+ラインフィード)を表すには、\r\n
を使用します。
sed.exe -e "s/$/\r/g" y:\out1.txt > y:\out.txt
改行コードを変更する
コマンドの説明
s/$/\r/g
: 各行の終わり ($
) にキャリッジリターンを追加します。\r
: キャリッジリターン。
例
例えば、y:\out1.txt
に以下のような内容がある場合:
行1
行2
行3
このコマンドを実行すると、y:\out.txt
の内容は次のようになります:
行1\r
行2\r
行3\r
CRLF(キャリッジリターン+ラインフィード)をLF(ラインフィード)のみに変換しながら、全ての行を連結
sed.exe -e ":loop" -e "N" -e "$!bloop" -e "s/\r\n/\n/g" y:\out1.txt > y:\out.txt
コマンドの構成
-e ":loop"
: ラベルloop
を作成。-e "N"
: 次の行を現在のパターン空間に追加。-e "$!bloop"
: ファイルの最後の行でない限り、ラベルloop
に戻る。-e "s/\r\n/\n/g"
: CRLFをLFに置き換えます。
実行例
例えば、y:\out1.txt
に以下のような内容が含まれている場合:
行1\r\n
行2\r\n
行3\r\n
コマンドを実行すると、y:\out.txt
に次のような出力が得られます:
行1\n
行2\n
行3\n
4行ごとにカンマで区切り、1行にまとめる
sed.exe -e "N" -e "N" -e "N" -e "s/\(.*\)\n\(.*\)\n\(.*\)\n\(.*\)/\1,\2,\3,\4/g" y:\out1.txt > y:\out.txt
コマンドの説明
-e "N"
: 次の行を現在のパターン空間に追加します。これを3回繰り返します。-e "s/\(.*\)\n\(.*\)\n\(.*\)\n\(.*\)/\1,\2,\3,\4/g"
: 各4行をカンマで区切って一行にまとめます。
実行例
例えば、y:\out1.txt
に以下のような内容があるとします:
行1
行2
行3
行4
行5
行6
行7
行8
このコマンドを実行すると、y:\out.txt
の内容は次のようになります:
行1,行2,行3,行4
行5,行6,行7,行8
次のコマンドでも OK です
sed.exe -e "N;N;N" -e "s/\n/,/g" y:\out1.txt > y:\out.txt
指定された文字数ごとに改行を挿入する。
sed -E 's/(.{10})/\1\n/g' ファイル名 > 出力ファイル名
例えば、10文字ごとに改行を挿入する場合:
説明
-E
: 拡張正規表現を使用。s/(.{10})/\1\n/g
: 10文字ごとに改行を挿入。(.{10})
: 任意の10文字のグループ。\1\n
: そのグループの後に改行を追加。
実行例
例えば、ファイル input.txt
の内容が次のような場合:
12345678901234567890
abcdefghijklmnopqrst
このコマンドを実行すると、output.txt
の内容は次のようになります:
1234567890
1234567890
abcdefghij
klmnopqrst
行の先頭にあるカンマを削除する
sed.exe -e "s/^,*//"
コマンドの説明
s/^,*//
: 行の先頭 (^
) にある0個以上のカンマ (,*
) を削除します。
実行例
例えば、y:\out1.txt
に以下のような内容がある場合:
,行1
,,行2
,,,行3
このコマンドを実行すると、y:\out.txt
の内容は次のようになります:
行1
行2
行3
sed
のホールドスペース操作コマンド一覧
コマンド | 説明 |
---|---|
h | ホールドスペースの内容をパターンスペースの内容で置き換えます。 |
H | ホールドスペースの内容末尾に改行を追加し、更にパターンスペースの内容を追加します。 |
g | パターンスペースの内容をホールドスペースの内容で置き換えます。 |
G | パターンスペースの内容末尾に改行を追加し、更にホールドスペースの内容を追加します。 |
x | パターンスペースの内容とホールドスペースの内容を交換します。 |
コマンドの詳細とサンプル
1. h
コマンド
ホールドスペースの内容をパターンスペースの内容で置き換えます。
echo -e "line1\nline2" | sed 'h'
結果:
line1
2. H
コマンド
ホールドスペースの内容末尾に改行を追加し、更にパターンスペースの内容を追加します。
echo -e "line1\nline2" | sed 'H'
結果:
line1
line2
3. g
コマンド
パターンスペースの内容をホールドスペースの内容で置き換えます。
echo -e "line1\nline2" | sed 'h;g'
結果:
line1
4. G
コマンド
パターンスペースの内容末尾に改行を追加し、更にホールドスペースの内容を追加します。
echo -e "line1\nline2" | sed 'h;G'
結果:
line1
line1
line2
5. x
コマンド
パターンスペースの内容とホールドスペースの内容を交換します。
echo -e "line1\nline2" | sed 'h;x'
結果:
line2
line1
ディスカッション
コメント一覧
まだ、コメントがありません