Linuxのテキスト処理 のバックアップソース(No.1)

#author("2021-07-18T21:49:55+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バイト単位

-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カラム目を取得

***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つにする

***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 ※ファイルとディレクトリの数を表示

**テキスト検索 [#o02a676a]
***fgrep [#l60287b7]
-fgrep <keyword> <file-name> 正規表現を使わない文字列検索

**テキスト検索([[正規表現]]) [#ra1af036]
***grep [#yb5e6f33]
-grep <keyword> <file-name> ※ファイルの文字列検索
 grep -c
 grep -i ※英字の大文字/小文字を区別しない
 grep -n ※検索結果に行番号を表示
 grep -v ※マッチしない行を表示
 grep -v '^#' ※コメント行を除く
 grep -G ※基本正規表現
 grep -E ※拡張正規表現
 
 grep $'\t' ※タブ文字
 grep '\s' ※スペース

-grep -f <keyword-file> <file-name> ※検索パターンをファイルから読み込む

***egrep [#ec02839b]
-拡張正規表現を使った文字列検索
-egrep <keyword> <file-name>

**テキスト編集(検索して削除・置換) [#tcc4b740]
***sed [#n8b730cd]
-実行パターン
--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)
 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]