わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

ファイル処理を復習する

Linuxのターミナルを使っていて,学生に問われて*1即答できたりできなかったりしたことを,調べ直しました.

  1. カレントディレクトリにある全ファイルを,サイズの大きいものから順に並べるには
    • ls -S
    • ls -l | sort -k 5 -n -r
  2. テキストファイルの先頭7行だけを取り出すには
    • head -n 7 ファイル名
    • head -7 ファイル名
  3. テキストファイルの241行目の内容を,emacsなしで知るには
    • sed -n 241p ファイル名
    • head -n 241 ファイル名 | tail -n 1

補足.何通りか書いたうち,最初のが一番洗練されていて,覚える価値があるもので,それ以外は,最初のが思い出せない時にひねり出そうかというものです.
headやtailの「-行数」オプションは,推奨されないとなった記憶があるのですが,実行しても警告は出ません.
ある行番号の内容を知るのに,catの-n (行番号をつけるオプション)とgrepをパイプでつなぐのが簡便な方法ですが,「grep 241」では,1241行目や,2410〜2419行目も出てきます.それで,空白の正規表現を入れて絞り込みを試みましたが,

cat -n ファイル名 | grep "^[[:blank:]]*241[[:blank:]]\\+"

という*2,とても暗記できないものになりました.grepで使用できる正規表現にあるように,0回以上の繰り返しは *,1回以上は \+ となります.

*1:そのとき学生自身に考えさせる余裕はなかったです.この日記を見せずに調べさせたら,さて何日かかるか….

*2:この実行コマンドを箇条書きに入れなかったのは,別扱いにしたかったからでなく,このまま書くとはてなのキーワード記法に引っかかるためです.