#author("2024-01-14T09:35:01+09:00","default:k1rou","k1rou")
#author("2024-01-14T09:37:35+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カラム目を取得
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つにする
**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 <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 -G ※基本正規表現
grep -E ※拡張正規表現
grep $'\t' ※タブ文字
grep '\s' ※スペース
-grep -e <patterns> <file-name> ※検索パターンの指定
grep -v -e "^#" -e "^$" ※コメント行と空行を除く
-grep -f <pattern-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]
awk '{print $1}'
awk '{print $1}' ※1カラム目を抽出