Linuxのテキスト処理
2024-01-14 (日) 09:37:35
Linuxのテキスト処理 †
テキストフィルタ(テキストデータを読込み処理結果を出力する機能) †
cat †
cat <file-name> cat -n <file-name> ※左端に行番号を付加して表示 cat <file1> <file2> > <file3> ※file1とfile2を結合してfile3を作成
nl †
nl <file-name> ※左端に行番号を付加して表示 nl -bt <file-name> ※本文への行番号の付加(空白以外の行に付加する) nl -ba <file-name> ※本文への行番号の付加(すべての行に付加する) nl -bn <file-name> ※本文への行番号の付加(付加しない) nl -ha <file-name> ※ヘッダへの行番号の付加(すべての行に付加する) nl -fa <file-name> ※フッタへの行番号の付加(すべての行に付加する)
od †
- 8進数で表示
od <file-name> od -to <file-name>
- 16進数で表示
od -x <file-name> ※2バイト単位 od -tx <file-name> ※4バイト単位 od -tx1 <file-name> ※1バイト単位 od -tx2 <file-name> ※2バイト単位 od -tx4 <file-name> ※4バイト単位
- ASCII文字で表示
od -c <file-name> od -tc <file-name>
- 並べて表示
od -tx1 -a <file-name> ※16進数とASCII文字を並べて表示
head †
- 先頭行の表示
head <file-name> ※先頭10行を表示 head -10 <file-name> ※先頭10行を表示(非推奨の書式) head -n10 <file-name> ※先頭10行を表示 head -c10 <file-name> ※先頭10バイトを表示
tail †
- 末尾行の表示
tail -10 <file-name> ※末尾10行を表示 tail -n10 <file-name> ※末尾10行を表示 tail -c10 <file-name> ※末尾10バイトを表示 tail -f <file-name> ※末尾の行をリアルタイムで表示し続ける(追記を追跡して表示)
tailf †
- ※tail -f と同じ
cut †
- 固定長向け
cut -c5 <file-name> ※5文字目を取得 cut -c3-5 <file-name> ※3~5文字目を取得
- 可変長向け(CSVなど)
cut -d, -f1 ※カンマ区切りの1カラム目を取得 cut -d" " -f1 ※スペース区切りの1カラム目を取得(スペース1文字区切り) cut -d"\t" -f1 ※タブ区切りの1カラム目を取得
paste †
- 列方向でファイルを結合
paste <file1> <file2> ※タブ区切りで結合 paste -d, <file1> <file2> ※カンマ区切りで結合 paste -d"," <file1> <file2> ※カンマ区切りで結合 paste -d"\t" <file1> <file2> ※タブ区切りで結合
tr †
- 標準入力した文字列を変換・削除する
- 書式
tr <オプション> <文字列>
- オプションに指定できるクラス
[:alpha:] [:lower:] [:upper:] [:digit:] [:alnum:] [:space:]
- オプションに指定できるクラス
- 使い方例
- パイプを使う
cat <file-name> | tr 'a-z' 'A-X'
- リダイレクトを使う
tr 'a' '0' < <file-name> tr 'abc' '012' < <file-name> tr 'a-z' 'A-X' < <file-name> tr [:lower:] [:upper:] < <file-name>
- パイプを使う
- 変換
tr 'a-z' 'A-X' ※英字の小文字を大文字に変換 tr [:lower:] [:upper:] ※英字の小文字を大文字に変換 echo $PATH | tr ':' '\n'
- 削除
tr -d '0-9' ※数字を削除 tr -dc '0-9' ※数字以外を削除 tr -d [:digit:] ※数字を削除 tr -d , ※カンマを削除 tr -d ',' ※カンマを削除 tr -d '\n' ※改行コード(ラインフィード)を削除 tr -d '\r' ※改行コード(キャリッジリターン)を削除(CRLFをLFに変更するのに便利)
- 1つにまとめる
tr -s [:space:] ※複数の連続したスペースを1つにする
sort †
- 並び替え
sort -b <file-name> ※行頭のスペースを無視する sort -f <file-name> ※英字の大文字/小文字の区別をしない sort -r <file-name> ※降順に並び替える sort -n <file-name> ※数字を数値として扱う
split †
split -10 <input-file> <output-file> ※10行ごとに分割したファイルを作成する(末尾がaa,ab,ac,..で作成)
uniq †
- 重複する行に対する処理
uniq <file-name> ※連続で重複している行を1つにまとめる uniq -d <file-name> ※連続で重複している行のみ出力する uniq -u <file-name> ※連続で重複していない行のみ出力する(重複している行を出力しない) sort <file-name> | uniq ※昇順に並び替えてから重複行を1つにまとめる
wc †
wc -l <file-name> ※行数を表示 wc -c <file-name> ※文字数を表示 wc -w <file-name> ※単語数を表示 ls | wc -l ※ファイルとディレクトリの数を表示
テキスト検索 †
fgrep †
- fgrep <patterns> <file-name> 正規表現を使わない文字列検索
strings †
- バイナリファイルなどに含まれるASCII文字を検索する
strings -a <file-name> ※ファイル全体をスキャン
テキスト検索(正規表現) †
grep †
- grep <patterns> <file-name> ※ファイルの文字列検索
grep -c grep -i ※英字の大文字/小文字を区別しない grep -n ※検索結果に行番号を表示 grep -v ※マッチしない行を表示 grep -v '^#' ※コメント行を除く grep -G ※基本正規表現 grep -E ※拡張正規表現 grep $'\t' ※タブ文字 grep '\s' ※スペース
- grep -e <patterns> <file-name> ※検索パターンの指定
grep -v -e "^#" -e "^$" ※コメント行と空行を除く
- grep -f <pattern-file> <file-name> ※検索パターンをファイルから読み込む
egrep †
- 拡張正規表現を使った文字列検索
- egrep <keyword> <file-name>
テキスト編集(検索して削除・置換) †
sed †
- 実行パターン
- sed <command> ※指定したコマンドを実行
- sed <command> ※指定したコマンドを実行
- sed -e <command> ※指定したコマンドを実行
- sed -e <command1> -e <command2> ※指定した複数のコマンドを実行
- sed -f <script-file> ※コマンドを記述したスクリプトファイルを読み込んで実行
- sed -i <command> <replace-file> ※指定したコマンドを処理した結果でファイルを更新
- コマンド部の書式
- 行削除(d) ※位置を指定
sed -e ‘[削除開始行],[削除終了行]d’
- 置換(s) ※文字列(またはパターン)
sed -e 's/[置換前の文字列]/[置換後の文字列]/g'
- 削除(s) ※文字列(またはパターン)
sed -e 's/[削除対象の文字列]//g'
- 置換(y) ※文字(指定した同じ位置の文字に置換)
sed -e 'y/[置換前の文字の並び]/[置換前の文字の並び]/g'
- 行削除(d) ※位置を指定
- 実行例
- 行削除(d)
sed '1,2d' input.txt ※1~2行目を削除 sed '2,$d' input.txt ※2行目~最終行を削除(1行目以外を削除)
- 置換(s) ※文字列、パターン
sed s/test/sample/ input.txt ※"test"を"sample"に置換(1行に複数ある場合は左の1件のみ) sed s/test/sample/g input.txt ※"test"を"sample"に置換(1行に複数ある場合は全て) sed '1,100s/^/#/' input.txt ※1~100行目の先頭に"#"を付加する
- 置換(y) ※文字単位
sed y/ABC/abc/ input.txt ※置換文字列の同じ位置の文字に置換(A→a,B→b,C→c)
- 行削除(d)
awk †
awk '{print $1}' ※1カラム目を抽出