Lから始まるLinux

2章58話
テキスト関連コマンド(その1)
2章59話 テキスト関連コマンド(その2)
もくじ
2章60話
パス関連コマンド
テキスト関連コマンド(その2)
若木 みどり
お兄ちゃん! テキスト関連だけでも 色々なコマンドがあるんだね!
若木 しげる
他にもおさえたい テキスト関連コマンドがあるよ 今回は前回に続いて そのようなコマンドを紹介するね
cut コマンド
若木 しげる
cut 文字列の一部分を 切り出すよ
cut [オプション]... [ファイル]...
オプション役割
-c 範囲, --characters=範囲指定された範囲の文字を切り出す
-f 範囲, --fields=範囲指定された範囲のフィールドを切り出す
-d 文字, --delimiter=文字フィールド区切り文字を指定(デフォルトはタブ文字)
若木 しげる
こんな感じで使えるんだ
コマンド出力意味
cut -c 2 <<< helloe2文字目を切り出す
cut -c 2,5 <<< helloeo2文字目と5文字目を切り出す
cut -c 2-4 <<< helloell2文字目から4文字目までを切り出す
cut -d / -f 3 <<< /home/midori/diarymidori区切り文字を / として3番目のフィールドを切り出す
若木 みどり(驚き)
あれ?cut -d / -f 3 <<< /home/midori/diary3番目のフィールドってdiary じゃないのかな?
若木 みどり
列挙するとhome, midori, diarydiary が3番目だと思うよ?
若木 しげる
これは cut を使うときに気をつけるべきことだね
若木 しげる
cut「区切り文字」を目印にして文字列を前後に分割するんだ
若木 しげる
なので1文字目の「スラッシュ(/)」の前の「空文字」が1番目の要素になってそこから home, midori ... フィールドを数えていくよ
若木 しげる
なので3番目の要素はmidori となるんだよ
若木 みどり(驚き)
なるほど…!気をつけるね!
若木 しげる
cut の注意点として区切り文字は「文字1文字」しか使えないよ
若木 しげる
フィールドの区切りに2文字以上の「文字列」「正規表現」を使いたい場合cut ではなく awk の方が適しているよ
tr コマンド
若木 しげる
tr文字列中の文字を置き換えたり取り除いたりするよ
若木 しげる
translate の略で「変換する」「転換する」といった意味なんだ
tr [オプション] セット1 [セット2]
オプション役割
-c, -C, --complement「セット1」の代わりに「セット1以外」を使う
-d, --delete「セット1」に指定された文字を削除する
若木 しげる
「セット」の概念がわかりづらいので例を見たほうがわかりやすいよ
コマンド出力意味
tr a-z A-Z <<< helloHELLO「英小文字(a-z)」「英大文字(A-Z)」に変換する
tr -d l <<< helloheo「文字 lを削除する
tr -cd l <<< hellolll 以外の文字」を削除する
若木 みどり
慣れるのに時間が掛かりそうだけどかしこい処理をしてくれるコマンドなんだね!
wc コマンド
若木 しげる
wc文字数などを数えてくれるんだword count の略だよ
若木 しげる
オプションの指定がなければ「行数」「単語数」「文字数」3つを表示してくれるよ
wc [オプション]... [ファイル]...
オプション役割
-l, --lines行数のみ表示する
-w, --words単語数のみ表示する
-m, --chars文字数のみ表示する
若木 みどり
色々な使い道がありそうなコマンドだね!test の数値比較とも相性がよさそう!
fold コマンド
若木 しげる
fold指定された文字数で行を改行するよ
fold [オプション]... [ファイル]...
オプション役割
-w 文字数, --width=文字数行を文字数で改行(デフォルトは80)
若木 みどり
へぇ…でも指定の文字数で行を折り返すことはあまりないかも?
若木 しげる
そうだね閲覧のために行を折り返すよりもテキスト加工の目的で使われることが多いんだ
若木 みどり
例えばどんなのかな?
若木 しげる
以下は英大文字小文字数字で構成されたランダムな16文字を取り出すよ
tr -cd a-zA-Z0-9 < /dev/random | fold -w 16 | head -n 1
若木 みどり
fold で 16 文字で行を折り返しhead で先頭の1行のみ表示することで16 文字だけ取り出しているんだね
若木 みどり(驚き)
tr とか /dev/random とか色々な要素が組み合わさって今まで習ったことの集大成みたいだね!パスワード生成に使えそう!
若木 しげる
/dev/random からの出力は「擬似乱数(pseudorandom numbers)」と呼ばれるもので本物の乱数ではないんだ計算から生成される「乱数っぽい数字」たくさんの値を高速に生成できるけど生成される値が推測可能な場合があるんだ
若木 みどり(驚き)
そうなんだ!パスワードに使うのはちょっと心配だね…
若木 しげる
セキュリティがからむ場合は疑似乱数を返す/dev/random ではなく本物の乱数を返す/dev/urandom があるのでそちらを使うようにしよう!
まとめ
若木 みどり
今回はテキストを処理するコマンドcut, tr,wc, foldを学んだよ!
若木 しげる(笑顔)
これらもアイデア次第で色々活用できるよ面白い使い方を思いついたら兄にも教えてね!