#author("2024-11-18T16:40:30+09:00","default:k1rou","k1rou") #author("2025-01-02T15:36:00+09:00","default:k1rou","k1rou") *Linuxのテキスト処理 [#ud6f5e60] -[[Linuxコマンド]] *テキストフィルタ(テキストデータを読込み処理結果を出力する機能) [#g1586a1b] **cat [#x709e193] cat <file-name> cat -n <file-name> ※左端に行番号を付加して表示 cat <file1> <file2> > <file3> ※file1とfile2を結合してfile3を作成 **nl [#w3cc91e4] nl <file-name> ※左端に行番号を付加して表示 nl -bt <file-name> ※本文への行番号の付加(空白以外の行に付加する) nl -ba <file-name> ※本文への行番号の付加(すべての行に付加する) nl -bn <file-name> ※本文への行番号の付加(付加しない) nl -ha <file-name> ※ヘッダへの行番号の付加(すべての行に付加する) nl -fa <file-name> ※フッタへの行番号の付加(すべての行に付加する) **od [#e006f6e8] -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バイト単位 ※-Ax 表示位置を16進数にする -ASCII文字で表示 od -c <file-name> od -tc <file-name> -並べて表示 od -tx1 -a <file-name> ※16進数とASCII文字を並べて表示 **head [#i5bfd6f4] -先頭行の表示 head <file-name> ※先頭10行を表示 head -10 <file-name> ※先頭10行を表示(非推奨の書式) head -n10 <file-name> ※先頭10行を表示 head -c10 <file-name> ※先頭10バイトを表示 **tail [#aa6a5cae] -末尾行の表示 tail -10 <file-name> ※末尾10行を表示 tail -n10 <file-name> ※末尾10行を表示 tail -c10 <file-name> ※末尾10バイトを表示 tail -f <file-name> ※末尾の行をリアルタイムで表示し続ける(追記を追跡して表示) **tailf [#k5153f5c] -※tail -f と同じ **cut [#cd08bd52] -固定長向け 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 [#u63bf9de] -列方向でファイルを結合 paste <file1> <file2> ※タブ区切りで結合 paste -d, <file1> <file2> ※カンマ区切りで結合 paste -d"," <file1> <file2> ※カンマ区切りで結合 paste -d"\t" <file1> <file2> ※タブ区切りで結合 **tr [#ja6459ca] -標準入力した文字列を変換・削除する -書式 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つにする **fold [#a50576ef] -指定した文字数で改行コードを挿入 fold -w 10 <file-name> fold -10 <file-name> ※固定長を改行コード区切りにする **sort [#m2ee04b1] -並び替え sort -b <file-name> ※行頭のスペースを無視する sort -f <file-name> ※英字の大文字/小文字の区別をしない sort -r <file-name> ※降順に並び替える sort -n <file-name> ※数字を数値として扱う **split [#we75419b] split -10 <input-file> <output-file> ※10行ごとに分割したファイルを作成する(末尾がaa,ab,ac,..で作成) **uniq [#ze710902] -重複する行に対する処理 uniq <file-name> ※連続で重複している行を1つにまとめる uniq -d <file-name> ※連続で重複している行のみ出力する uniq -u <file-name> ※連続で重複していない行のみ出力する(重複している行を出力しない) sort <file-name> | uniq ※昇順に並び替えてから重複行を1つにまとめる **wc [#ed900b96] wc -l <file-name> ※行数を表示 wc -c <file-name> ※文字数を表示 wc -w <file-name> ※単語数を表示 ls | wc -l ※ファイルとディレクトリの数を表示 **rev [#b6c4d981] -入力した文字列を逆順で出力する(行単位で処理する) echo -n "123" | rev echo -n "123\nabc" | rev rev <file-name> *テキスト検索 [#o02a676a] **fgrep [#l60287b7] -fgrep <patterns> <file-name> 正規表現を使わない文字列検索 **strings [#z87ded70] -バイナリファイルなどに含まれるASCII文字を検索する strings -a <file-name> ※ファイル全体をスキャン *テキスト検索([[正規表現]]) [#ra1af036] **grep [#yb5e6f33] -grep <patterns> <file-name> ※ファイルの文字列検索 grep -c grep -i ※英字の大文字/小文字を区別しない grep -n ※検索結果に行番号を表示 grep -v ※マッチしない行を表示 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> ※検索パターンをファイルから読み込む -指定した文字を色付けする grep --color "abc" ※抽出した行のみ出力 grep -E --color "$|abc" ※抽出した行以外も出力 grep --color=auto "abc" GREP_COLOR="1;31" grep -E --color "$|abc" **egrep [#ec02839b] -拡張正規表現を使った文字列検索 -egrep <keyword> <file-name> *テキスト編集(検索して削除・置換) [#tcc4b740] **sed [#n8b730cd] -実行パターン --sed <command> ※指定したコマンドを実行 --sed -e <command> ※指定したコマンドを実行 --sed -e <command1> -e <command2> ※指定した複数のコマンドを実行 --sed -f <script-file> ※コマンドを記述したスクリプトファイルを読み込んで実行 --sed -i <command> <replace-file> ※指定したコマンドを処理した結果でファイルを更新 -コマンド部の書式 --行削除(d) ※位置を指定 sed -e ‘[削除開始行],[削除終了行]d’ --置換(s) ※文字列(またはパターン)最初の1つのみ置換 sed -e 's/[置換前の文字列]/[置換後の文字列]/' --置換(s) ※文字列(またはパターン)すべて置換 sed -e 's/[置換前の文字列]/[置換後の文字列]/g' --削除(s) ※文字列(またはパターン) sed -e 's/[削除対象の文字列]//g' --置換(y) ※文字(指定した同じ位置の文字に置換) sed -e 'y/[置換前の文字の並び]/[置換前の文字の並び]/g' -実行例 --行削除(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) **awk [#re0d660d] -標準入力から入力された値とパターンが一致した場合にコマンドを実行する --パターンの記述 /拡張正規表現/ (条件式) ※0:偽、0以外:真 --変数 $0 ※引数全体 $1 ※1つ目の引数 -サンプル:パターンなし awk '{print $1}' ※1カラム目を抽出 →入力モードに切り変わる a b c →1カラム目の"a"が出力される [Ctrl + D] で入力モード終了 -awk '/<pattern>/<command>;' --サンプル awk ' /123/ {print "Yes it is!";} ' -awk '(<pattern>)<command>;' --サンプル awk ' BEGIN { print "Hello"; } ($1>10) { print $1" is greater than 10"; } ($1<10) { print $1" is less than 10"; } END { print "Bye"; } ' *関連用語 [#xa15c0b3] -[[Linuxのファイル操作]]