お兄ちゃん!
テキスト関連だけでも
色々なコマンドがあるんだね!
前回は
sort
, uniq
, tac
, rev
を学んだよ!
他にもおさえたい
テキスト関連コマンドがあるよ
今回は前回に続いて
そのようなコマンドを紹介するね
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
で3番目だと思うよ?これは 「区切り文字」を目印にして 前後に分割するんだ
cut
を使うときに気をつけるべきことだねcut
は文字列をなので1文字目の「スラッシュ( の前の 「空文字」が1番目の要素になって そこから と フィールドを数えていくので3番目の要素は
/
)」home
, midori
... midori
となるんだなるほど…!気をつけるね!
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
を学んだよ!これらもアイデア次第で色々活用できるよ面白い使い方を思いついたら兄にも教えてね!