command.txt
このテキストの意図は、linuxのコマンドラインで、便利なコマンドを紹介することです。
ブログの記事で書いてきたもののまとめです。linux素人の記事ですので、一般的で価値のないものかもしれません。(2023.11.6 兼子)
■行の戦闘に
の文字追加の方法1、sedを使う場合
sed "s/^/
/g" nipou1.txt
ファイルに出力するときは下のようにする
sed "s/^/
/g" example.txt >tmp.txt
■行の戦闘に
の文字追加の方法2、awkを使う場合
awk '{print "
" $0}' example.txt
もちろんsedと同様にファイルに出力するときは
awk '{print "
" $0}' example.txt >tmp.txt
■上の処理後のテキストをc言語でhtmlにするプログラムを参考のため載せてみる
htmalni.c
#include
int main(void)
{
int c;
FILE *fp1,*fp2;
if((fp1=fopen("nipou.txt","r"))==NULL){
printf("ファイルが見つかりません。\n");
return 0;
}
if((fp2=fopen("nipou.html","w"))==NULL){
printf("ファイルが見つかりません。\n");
return 0;
}
fputs ("\n",fp2);
fputs ("\n",fp2);
fputs ("\n",fp2);
fputs ("\n",fp2);
fputs ("ここにタイトルを書きます\n",fp2);
fputs ("\n",fp2);
fputs ("\n",fp2);
fputs ("\n
",fp2);
while((c=fgetc(fp1))!=EOF)
fputc(c,fp2);
fputs ("\n",fp2);
fputs ("\n",fp2);
fclose(fp1);
fclose(fp2);
return 0;
}
全体の処理 linux環境で下の3行で処理は完了する。出来上がったのは nipou.html である
sed "s/^/
/g" nipou1.txt >nipou.txt
gcc htmlni.c -o nipouexe
./nipouexe
■空行削除の方法、3つ、対象は文字のみのテキスト。
まずgeditなどのエディターで行う場合は編集機能の置換を選ぶ、検索文字列はlinuxとwindowsでは違うので注意。(改行コードによって変わるので注意)LFはラインフィード、CRはキャリッジリターンの意味。
エディター上で
検索文字列
LF(Mac/Linux)の場合:
^\n
CRLF(Windows)の場合:
^\r\n
置換文字列
(何もなし)
次はgrep使用、これはコマンドライン上で行う操作、ファイルパスは対象ファイルをパス付きです。例sample.txt
grep -v '^$' ファイルパス
最後はsedを使う場合、これもコマンドラインでsedを介して行う操作
sed '/^$/d' ファイルパス
■fortune おみくじ
fortuneファイルを作ってみた。おみくじ、なにせランダムに出力するので可能になる。
何の変哲もないテキストだが、何が出てくるか運次第、だから面白い。
むかし、アセンブラーを使ってこれを作っていたのをちょっとだけ思い出したmsdos時代、今はfortune使えば楽ちん
omikuji
大凶 しょげずにがんばって、気分転換も必要!
%
凶 気をつけて過ごしましょう!
%
末吉 辛抱強くがんばって!
%
吉 何か良いことと出会いますよ!
%
小吉 1つくらい良いことあるでしょう!
%
中吉 結構、運が向いて来ますよ!
%
大吉 幸運な一日!
これをもちろん前回書いたstrfileで処理しておくことが必要。fortuneにはpathが通っているが、omikujiにはpathは遠ていないので実行にはこのファイルのあるディレクトリで実行する必要がある。
fortune omikujiで
吉 何か良いことと出会いますよ!
などと出力される。
■fortune ファイルの作り方
linuxでfortuneを使っている。端末からfortuneとやると格言のようなものが出力される。もちろんこれはinstallが必要だが
sodu apt install fortune
でインストールはできたと思います。
まず用意するのは
takaraというテキストファイル、中身は
100000円 一等賞 大当たり!
%
2000円 二等賞 おめでとう!
%
300円 三等賞 300円ゲットしました!
%
10円 はずれ 残念 またね!
%
0円 宝くじ 賭けなかったでしょう。ではね!!
(終わり)
%で区切ったテキストファイル、utf-8の文字系で文末はLのみwindowsのcr+L(キャリッジリターンは取り去る、Lラインフィードのみ)(windowsでファイルを作成するときterapadなどで確かめて文末を指定してください。linuxのgeditで作ればそのまま何もしなくて良いです。)でないとだめ、%区切りなので、何行でもOK
このファイルだけではだめで
strfile takara
としてtakara.datファイルを発生させる必要がある。この2つのファイルを同じディレクトリーに置いてfortuneを実行すれば良い。strfileはfortuneをインストールすれば自動的にインストールされる。
fortune takara
百人一首、歴史年表、自分の好きな詩などをファイルにしておくとランダムにその都度出力されるの気分転換にはなります。
■grep で遊ぶ(個々で使っているkagaku、nenpyou、tango2はインターネットにあったものを編集しています)
今回はランダムでなく、ポイントでヒットさせて表示する方法の紹介、fortuneのとき作ってあった、ファイル群を使ってみることにする。
使うのはgrepだ。これは高速で検索して、表示してくれるもので、役に立つ遊び方もできるというものである。
kagakuというファイルにある’アインシュタイン’の名言があるのかなと検索する。
コマンドラインでの書き方
$ grep -n -C1 'アインシュタイン' ドキュメント/game/kagaku
-nはファイル中の行番号、-C1は「アインシュタイン」の前後1行を表示するもの、下は結果、2箇所にあった。
1-このすばらしい応用科学は労働を軽減し、生活をより安易にしてくれながら、なぜわれわれに幸福をもたらしてくれないのか。答えは簡単である。われわれが、それを有意義に利用するにいたっていないからである。
2:アインシュタイン (カリフォルニア技術院の演説・1931/2)
3-%
--
16-宗教なき科学は不完全であり、科学なき宗教にも欠陥がある。
17:アインシュタイン 「晩年に想う」
18-%
次の例は、1972年のnenpyouファイル中の1972年の記述
$ grep '1972' ドキュメント/game/nenpyou
1972 ニクソン訪中、共同声明発表
次の例は英単語の中の先頭がabがつくもの、^は先頭という意味、2つありました
$ grep '^ab' ドキュメント/game/eitango2
absorb …を吸収する,…を没頭させる
absolutely 絶対に
次の例は、以前紹介した百人一首の中にゆふぐれの箇所の検索、3箇所ありました
$ grep 'ゆふぐれ' ドキュメント/game/kaneko
いづこもおなじ あきのゆふぐれ 良選法師
きりたちのぼる あきのゆふぐれ 寂蓮法師
かぜそよぐ ならのをがはの ゆふぐれは
結構遊べるものだとわかります。fortuneもgrepもlinuxのコマンドです。
■sedの置換
(例)
2023/01/01(Su)
2023/01/02(Mo)
2023/01/03(Tu)
---
を
2023/01/01(Su)
2023/01/02(Mo)
2023/01/03(Tu)
に置換する
つまり
の改行タグをつけるではどうするか
sed s/^2023/'
'2023/g plan231.txt
linuxのコマンドラインで処理すればよいはず。
■linuxコマンドでqrコードを作る
qrはインストールが必要
qr "http://www.ne.jp/asahi/yoshikn02/namo/mhousiki/" > mhoisiki.png
これで、次々にqrコードを作るにはシェルスクリプトで””を変えて書いておけば良いことになる。
■linux コマンド sortとclear
clearは画面をきれいにしてくれる。黒板消しのようなものだ。sortコマンドはどのようなことに使えるのか試してみた。
sort file名
でsortされた結果が出てくる。-rのオプションをつけると逆順になる。それは良いとして、もっとも的確に出してくれるのはアルファベットだ。日本語もあいうえお順に関しては問題ない。utf-8でも漢字に関しては、符号の順(アスキー順)だろうか。
数字に関しては1,2,3,は問題ないけと2桁以上になると問題発生、11、101で比べれば101が先にくる。
例えば年表(BC,ADごちゃごちゃだけど)
100 北朝鮮に高句麗が起こる
1000頃 バラモン教の成立 →インドのカースト制度
100? カエサル生まれる(~44)
1010 李朝大越国、成立(~1225)
1038 ペルシアにセルジューク朝、成立(~1157)
105 蔡倫、紙を発明
-------
英単語 逆順をとった場合。
worth …の価値がある
worry …を心配させる/心配
wonder …かなと思う/驚き
win 勝つ,…を勝ち取る
while …である一方で,…している間に
weight 重さ,体重
------------
例えば日本語 空白は一番先、かなは次、カタカナは後は良いとしても、
あかつきばかり うきものはなし 壬生忠岑
あきかぜに たなびくくもの たえまより
あきのたの かりほのいほの とまをあらみ
あけぬれば くるるものとは しりながら
------
漢字の順はわけがわからない、その例、
衣食を饒にして人品を貴くするを云うなり。 文明之論概略
遠くて近きもの 極楽。舟の道。人の中。 枕草子
家では、お客が来ても一々お菓子をだすということも
格言は、短くて真髄を突く言葉だ。
------------
もちろんsortはパイプでつないで使うことも可能である。ただし行ごとのソートである。
なかなか思うような結果は出せず、使う場面は難しい。そうすると正規表現のawk、perlの出番になるのかもしれない。
■数字sort 、一つの解決方法
前の記事で数字に関しては1,2,3,は問題ないけと2桁以上になると問題発生、11、101で比べれば101が先にくる。
例えば年表(BC,ADごちゃごちゃだけど)
100 北朝鮮に高句麗が起こる
1000頃 バラモン教の成立 →インドのカースト制度
100? カエサル生まれる(~44)
1010 李朝大越国、成立(~1225)
1038 ペルシアにセルジューク朝、成立(~1157)
105 蔡倫、紙を発明
-------
と書いたが、これを解決する一つの方法は00を先頭につけて5桁にする方法、歴史記事では1万年前は無いからこうしてみる
-00100? カエサル生まれる(~44)
00100 北朝鮮に高句麗が起こる
00105 蔡倫、紙を発明
01000頃 バラモン教の成立 →インドのカースト制度
01010 李朝大越国、成立(~1225)
01038 ペルシアにセルジューク朝、成立(~1157)
---------
一応順番通りに並ぶ。もう一つの方法も考えた。2進数にする方法
100→01100100のようにして並べればおそらく問題はなさそうだが、、、これも面倒で何年かをまた戻して考えなくてはならない。
■emacsのカレンダー、計算機、web閲覧を使ってみる
emacsを使い始めてみるとなかなか使い勝手が良い。結構、自分のやりたかったことが、作り込まれていることにある。dairyや計算機能、command shell などいずれもできて、さらにwebのブラウザも動くとなれば困ることは少ないように思う。つまりemacsに慣れれば、プログラミングからブログの記事まで一貫してできそうだ。少しviとともに使ってみようと思う。windows版もある。最新は28.2のようでこれをインストールした。vimは9.0がwindows版の最新らしい。
■ji.sh バッチファイルの実行、文章を書くため
ターミナルを使ったbashのコマンドからmsdos時代のように、バッチファイル使ってviでテキストを書いてみようとしたのでその紹介です。バッチファイルの中身はこんな風になっています。
バッチファイル名はji.sh(特にこれは何でも良い実行.シェルと意味でji.shとつけてみました。)
##!/usr/bin/bash
#!/bin/sh
cal
date
fortune
read -p "hit return key"
vi ドキュメント/mypy/kongetu.py
python3 ドキュメント/mypy/kongetu.py
read -p "hit return key"
vi ドキュメント/kdoc/22memo.txt
vi デスクトップ/tuku1.txt
cp -u デスクトップ/tuku1.txt ../../media/kaneko/48FE-7A10
(終わり)
##行はなくてもbashでは動きます。(shではこれがないと動かないと思います)
calはその月のカレンダー、dateはその日の日時、fortuneはマークトウェイン、シェークスピアなどの名言集(数行の短文)
次からは、viによるスクリプトの編集です。変更がなければ:qで抜けます。python3でスクリプトを実行します。
read -p 文はポーズです。これがなければ次の処理へと進んでしまいます。viで更にメモテキストを閲覧したり、編集します。
編集するときは、iを打ち、インサート(挿入)モードに入り、抜けるときはescキーを押して、:wqで上書き終了します。
そして、最後の文は、cpはtuku1.txtをusbメモリーに保存するための操作です。-uがついているのは、日時を比べて新しければコピーするというオプションです。下のバッチファイルを実行するには、./ji.sh 7文字打てば良いです。ただしji.shファイルはchmodでファイルの属性を実行できるようにしておく必要があります。(chmod +x ji.sh でOKです)
■bash のコマンド
現在ディレクトリを知りたければmsdos時代はpath(パスが通っているかのチェック)だけど、linuxではpwdと打つ。
bashの組み込みコマンドを知りたいときは、bash -c helpとする。bashのバージョンを知りたいときはbash --versionとする。さて、shを使いたいとき、単にshとすると使っているshellが変わるので、プロンプトもかわる。この場合、パス付きではないので頻繁にpwdでパスを確かめる必要がある。またshでは、historyは効かない。bashやshで実行スクリプトを書くのは、msdosのころのバッチファイルと同じ、直接実行したいコマンドを並べて書けば良い。これを拡張し.shとしておけば後でls *.shで拾って、実行すればいい。msdosの時は.batだった。shからぬけるときはexitでよい。ディレクトリーもそのままbashのshellになる。shもbashも使えるコマンドは共通している。ls、cd、head、wc、rm、whereis、man、info、cp、grep、find、sed、awk、cal、date、less、more、cat、fortune、viなど、組み込みでないものあるけど。
shではhistoryなどは効かないので、これを実行するときは一々コマンド書くのが面倒なので、バッチファイルにしておきた方がベターなように思う。このバッチファイルの書き換えや編集は軽快に動くviエディターが便利。
ubuntu を一瞬で終わらせるには、shutdown -h now とする。管理権限がなければsudoが必要となるかもしれない。
■bash コマンドnkf、find、sed、w3m
linuxのコマンドはもちろん、msdosの時代とは大違いで、柔軟に様々のことができる。
今回はwindowsで作ってあったpythonのスクリプトをlinuxのホルダーに入れて使うことを考えた。
まずファイルのコピーはmcを使うのが便利、もちろんcpコマンドでもできるが。
さて、文字体系が違うのでそれを直さなくてはならない。これには前々回くらいに紹介した方法
nkf -Lu -w --overwrite *.py
で一括で変更する。しかし問題は先頭行のコーディングのところでつけられたshift_jisからutf-8への変換は上の処理ではやってくれない。
そのまま、pythonを動かすと処理してくれない。そこで一括してこれを検索置換する方法を考える。すべてのpythonのスクリプトを処理するので
次のように処理する
find ./*.py | xargs sed ’s/shift_jis/utf-8/g’
findコマンドでそのディレクトリーの拡張子pyfileを見つける。次にそれをパイプでエコーしてsedに渡すらしい。sが検索そしてgで置換を行うという処理のようである。
この処理も一瞬である。linuxのコマンドライン処理はちょっと間違うと後で取り返しがつかない場合が多いのでsed の後ろにi.bakでバックアップのファイルを作成すると安心らしい。しかしまた消すのも面倒。消去のrmコマンドも間違うときれいにすべてがなくなる。
さて、viの勉強も大分進んだ。モードを知ること、ddやyyやpは便利、そしてiを押して挿入モードで文章を書く、修正する。そしてスクリプトファイルのときは、:!でコマンドを書いてそのまま、pythonを走らせることができる。python2とpython3の違いも重大で、一方がだめなら他方で動かしてみるというようなことをしている。
w3mが動かなければ、インストールする必要がある。
やり方は
sudo apt install w3m
でできるでしょう。今回は前々回に書いたpythonのスクリプトからでなく、w3mを使って、テキストのwebページを取得する方法を紹介します。
コマンドラインで書くにはこうします。
w3m http://www.ne.jp/asahi/yoshikn02/namo/mhousiki/kyoku/index.html
とすれば、脳トレの会で演奏した曲目がテキスト出力されます。
w3m http://www.ne.jp/asahi/yoshikn02/namo/mhousiki/kyotei/myotei.html |grep -n "脳トレ"
とすれば脳トレが含まれるテキストラインがライン番号付きで出力されます。
もう一つ、おまけです。コマンドターミナルで、コピーとペーストを実行するのはctl+shft+cでコピー、ctrl+shift+vでペーストができる。
biglobeのブログ終了宣言で、ちょっと試した。なもさんの記事はほとんど文字主体、そこで何回か記事を書いているbashでw3mのコマンドで記事を取得してみることにした。書き方はこうである。
w3m https://yoshikn02.at.webry.info/202201/article_6.html
で前回の記事が出る。もっともほかのページの気持ち玉なども、カレンダーも出てくるが。わかりやすいのでaerticle_6.htmlの数字を変えれば前回前々回の記事が出てくる。これでいつが最初か見てみたら200411となっていたので、これが最初で17年前くらいから書いていたことになる。
bashの環境では、うるさい宣伝は出てこないので、文字を拾うだけなら読みやすいように感じた。アサブロも書いているのだが、こっちは自分の記事がわかりやすくなっていない。この点はbiglobeはわかりやすい。
■bashコマンド gedit、read バッチファイル
geditとやれば起動してくる。windows10ではもちろんだめ。power shellの状態でnotepadとやればnotepadは起動する。ubuntuのbashに入ってからではダメ。
shellスクリプトを止めるときread文を使う。一時停止、エンターキーでコマンド実行再開。
コメント欄は#を付ける。
下はrei.batとして実行させたもの(参考までに)
cal
date
fortune
cd bun
read -p 'enter go!'
head -15 memo.txt
read -p 'enter go!'
emacs memo.txt
何が実行されるか解説。今月のカレンダー、今日の月日と時刻、fortune(ことわざなど)、ディレクトリをbunへ入って、一時停止、
memo.txtの頭から15行を出力して、一時停止、それからemacsのエディターでmemo.txtを編集する。
これが一連の作業です。
headの代わりにtailとすると終わりの15行を出します。
python web2.py |head -20
と書いておけば、web上にあるforkane.txt の頭から20行が表示されると思います。このテキストを日報などにすれば、ブラウザーを開かなくても、日報が必要な人が取り出すことができるでしょう。ここでは以前紹介したテキストが出てきます。(ワクチン状況など、入院状況など)
web2.pyの中身は、(python2.7で動くと思います)
#!/usr/bin/env python
# -*- coding: utf-8*
import urllib2
#ここにurlを直接記述する
url = 'https://www.ne.jp/asahi/yoshikn02/namo/kaneko/forkane.txt'
fp = urllib2.urlopen(url)
html = fp.read()
print html
fp.close()
updateが必要なときも
sudo apt-get update
書いておけば、毎回忘れることはないでしょう。sudoを使うときはパスワードが必要です。
■コマンドライン メモ、忘れないために、、、
・pythonで大きな数値の扱い、1.56e23などとすれば
1.56×10(23乗)
を扱うことができる。もちろん計算式の中でOK
・コマンドラインでrenameコマンドを使う。
ファイル名にp_をつけた.txtから.pyファイルへのrenameのやり方。
rename e:\pomera\p_*.txt p_*.py
これで一斉に変換できる。
逆はどうするかというと、このようにする。
rename e:\pomera\p_*.py p_*.txt
ここでは、e:ドライブにpomeraを接続しているとする。
■コマンド split、cat
splitが分割、catが結合だった。
どのようにするのかやってみたら、簡単だった。
行単位の分割もできるが文字数に制限があるので、
バイト単位で行えば、どこで切れるか分からないが。
これしかない。14kBで分割してみた。
split -b14k test.txt
できるのはデフォルトではxがつく
xaa
xab
xac
xad
、、、、、、
これを結合するには
cat xaa xab xac xad >test1.txt
で元のファイルができる。
■ntf を使う msdosでのコマンド
行の追い込みだけでなく、印刷形式まで指定できるのを使って、pdfファイルにしてしまおうという、ntf作者新島さんのアイデア。
例文としてこのブログでも紹介したpythonスクリプト
をテキストからpdfのファイルに書き出す方法を
紹介してみましょう。
テキストはここではr6dos.txt、これをr6dos.pdfのファイルで書き出します。
コマンドラインでの処理です。|でntfに渡してpdf.ntfのマクロを
呼び出して処理して、書き出しています。
type r6dos.txt |ntf @pdf.ntf >r6dos.pdf
ubuntu での処理では、次のようにします。
cat r6dos.txt |./ntf @pdf.ntf >r6dos.pdf
なお、コマンドラインで桁折り整形は
次のようにします。半角60文字で合わせる場合。ここでの
文字コードはshift-jisです
./ntf -ll 60 sample.txt |lv
■バッチ処理、コマンド群を一括実施
linuxでmsdosの時代のようにバッチファイルを動かしてターミナルを利用してみようと思っている。
とりあえず。次のコマンドを次々に送る
以下のコマンド群をyoteiバッチファイルとして実行ファイルに変更(chmod +x yotei)
実行ターミナルで./yoteiとコマンド打つ。
---------
fortune
date
cal
cat /media/USB1/list.txt
------------
上のコマンドの意味は次のとおりです。
fortuneを2回(これは、英文がランダムに出力されます)
date で今日の日時
cal 今月のカレンダー
cat で予定リストのテキストを表示
------------------
以下は出力例です
Have a place for everything and keep the thing somewhere else; this is not
advice, it is merely custom.
-- Mark Twain
2011年 2月 6日 日曜日 17:03:36 JST
2月 2011
日 月 火 水 木 金 土
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28
<< やることのリスト >>
・メモ1
・メモ2
・メモ3
---------------------
この予定リストも
gedit /media/USB1/list.txt
などとしてバッチファイルに書いておけば
自動的に開くの編集ができる。
■mysql データベースの勉強、しばらくやっていなかった。
mysqlはmsdosで動かしていたので、linuxでの扱いは初めて、でも時間があったので試みた。まず、引っかかった。それは、インストールからだ。synapticのパッケージマネージャーを使ってインストールを試みる。mysql5.0のseverバージョン、clientも同時に入るようだ。
しかし、ここで端末からsudoを使ってインストールしなさいとメッセージ。
まあ、これはうまく行ったのだが、次にmysqlとやると動くけど
create databaseができない。これは、-uでroot権限がないと
だめ。当然だが、、、でもエラーのメッセージにはかかれていない。
さて、次にできたデータベースにアクセス、このときターミナル
からshow database; とコマンド打つけどエラー。
このエラーが困った。しばらくして気づく。databasesと複数型
が必要。show tabales;とやる。こちらも一つしなくてもこれが必要。
後は、dosのタブ区切りのデータを読み込ませるが、utf-8に
しておくことを忘れずにやることが必要。
何とかサンプルのテーブルが出来上がった。
もう一つopen officeのデータベースも動かしてみた。
msのアクセスに似ているけど、根本的に違うらしい。
こちらのデータベースはデータをデータベースに格納
するのでなく、表計算のファイルとリンクしている。
だから表計算を直すデータベースに反映するらしい。
そしてクエリーで必要なものを引っ張り出すらしい。