お兄ちゃん!
テキスト関連だけでも
色々なコマンドがあるんだね!
他にもおさえたい
テキスト関連コマンドがあるよ
今回は前回に続いて
そのようなコマンドを紹介するね
cut コマンドcut は
文字列の一部分を
切り出すよ
cut [オプション]... [ファイル]...
| オプション | 役割 |
|---|---|
-c 範囲, --characters=範囲 | 指定された範囲の文字を切り出す |
-f 範囲, --fields=範囲 | 指定された範囲のフィールドを切り出す |
-d 文字, --delimiter=文字 | フィールド区切り文字を指定(デフォルトはタブ文字) |
こんな感じで使えるんだ
| コマンド | 出力 | 意味 |
|---|---|---|
cut -c 2 <<< hello | e | 2文字目を切り出す |
cut -c 2,5 <<< hello | eo | 2文字目と5文字目を切り出す |
cut -c 2-4 <<< hello | ell | 2文字目から4文字目までを切り出す |
cut -d / | midori | 区切り文字を / として3番目のフィールドを切り出す |
あれ?
cut -d / -f 3 <<< /home/midori/diary の3番目のフィールドってdiary じゃないのかな?列挙すると
home, midori, diary でdiary が3番目だと思うよ?これは
cut を使うときに気をつけるべきことだねcut はなので1文字目の「スラッシュ( の前の 「空文字」が1番目の要素になって そこから と フィールドを数えていくよ
/)」home, midori ... なので3番目の要素は
midori となるんだよなるほど…!気をつけるね!
cut の注意点として区切り文字はフィールドの区切りに2文字以上の「文字列」や 「正規表現」を使いたい場合
cut ではなく awk の方が適しているよtr コマンドtr は文字列中の文字を置き換えたり取り除いたりするよtranslate の略で「変換する」 「転換する」 といった意味なんだ
tr [オプション] セット1 [セット2]
| オプション | 役割 |
|---|---|
-c, -C, --complement | |
-d, --delete |
| コマンド | 出力 | 意味 |
|---|---|---|
tr a-z A-Z <<< hello | HELLO | a-z)」A-Z)」 |
tr -d l <<< hello | heo | l」 |
tr -cd l <<< hello | ll | l 以外の文字」 |
慣れるのに時間が掛かりそうだけどかしこい処理をしてくれるコマンドなんだね!
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 からの出力はそうなんだ!パスワードに使うのはちょっと心配だね…
セキュリティがからむ場合は疑似乱数を返す
/dev/random ではなく本物の乱数を返す/dev/urandom があるのでそちらを使うようにしよう!今回はテキストを処理するコマンド
cut, tr,wc, foldを学んだよ!これらもアイデア次第で色々活用できるよ面白い使い方を思いついたら兄にも教えてね!