1つずつ修正 vs シェルコマンド

シェルコマンドで整える

ネットワークエンジニアだとDescriptionの変更は割とあって、「本数は多くないから チマチマやろう」と思うことがあります。

♯例
I/F description router-0 -> I/F description router-10
I/F description router-1 -> I/F description router-11
.
.
.
int description router-10 と手で打つ

ただこれだとやはりイレギュラーに対応できないので、シェルコマンドで整えた 方がいいですね。つい最近も「シェルコマンドで成形したおかげでミスってなかった」 ってことがありました。手打ちだとミスってたなと。

上の例だとこんな感じで整える。

int description router-0
int description router-1
int description router-2
int description router-3
int description router-4
int description router-5
int description router-6
int description router-7
int description router-8
int description router-9
#これを下記にする
$cat router_description | sed 's/-/-1/'g
int description router-10
int description router-11
int description router-12
int description router-13
int description router-14
int description router-15
int description router-16
int description router-17
int description router-18
int description router-19

ちなみに例はPythonで作成してます。シェルコマンドでも作れるのですが、覚えにくいので(いつも思い出すのに時間がかかるまたはググる) 最近はもっぱらPythonです。

for i in range(0,10):
...     print(f'int description router-{i}')
...
int description router-0
int description router-1
int description router-2
int description router-3
int description router-4
int description router-5
int description router-6
int description router-7
int description router-8
int description router-9

結論

手打ちはやはりミスるのでシェルコマンドを使いましょうという結論です。pythonもreplaceとか使うと 変更できるのですが、私はsedとか使います。私の技量不足でPythonでのテキスト処理は難しくて・・・。 他のネットワークエンジニアの皆さんはどうやっているのかは知りたいところですね。JANOGでもこういう小技 取り上げてほしいなぁ。

Pythonで日記のテンプレを作る

日記を書いていて、以下のようなテンプレが欲しかったので、Pythonで作ってみました。

#欲しいテンプレ
2023-06-26(Mon)
朝:目玉焼き、味噌汁、コメ
昼:サンドイッチ、カフェオレ
夜:ラーメン
5時に起きた
#dairy_template.py
from datetime import datetime, timedelta

date_list = [datetime(2023, 6, 20) + timedelta(days=i) for i in range(60)]
date_str_list = [d.strftime("%Y-%m-%d(%a)") for d in date_list]
for i in date_str_list:
    print(i,"\n朝:\n昼:\n夜:")

#range部分を変えるともっと作成たくさん作れます。

2023-08-11(Fri)のようにしたく、ググって調べました。以下を参考に目的のテンプレができました。 感謝。。 analytics-note.xyz

Python エディター

gihyo.jp

上記の本を読んで、Pythonを勉強しなおしているのですが、エディターがいかに大事かを学んだので、そのまとめ。

 

 

IDLE

Pythonをインストールすると付随してインストールされるエディタ。本ではこれを推奨してて、一番手軽。インタラプト形式でも書ける。

 

拡張子pyのファイルの新規作成/開閉も簡単。以下は1~100で一個飛ばしの出力。

Runをクリックすればすぐに実行可能。

 

IDLEのいいところ

構文ミスを指摘してくれる「ここ間違ってない?」と表示されるので、勉強し始めはとにかく助かる。以前PyQで勉強してた時はエラーだけ出力されて、ヒントっぽいのは出力されないので、毎回問い合わせてました。PyQは「ひたすら問題を解く」という形式なので、学習初期は本の方がいいですね。解説が書いてあるし、「動くコード」が記載されているので。

 

IDLEの短所

カッコの補完がないくらい?

 

VS CODE

拡張機能を入れて使えばかなりよい。色分けされて、カッコの補完、Runも可能。

 

 

インストール時にチェックする項目

インストール時に「VS CODEで開くか」という項目が2つあるのですが(キャプチャ忘れました)、これをチェックしておきましょう。これをしておくと、右クリックでファイルもVS CODEで開けます。フォルダも右クリックから開けるようになります。

 

最初にこれをやらないと、再度インストールしてその際に2項目を選ぶ羽目になります。散々調べたのですが、設定での変更は不可のようです。

 

必要な拡張機能

  • Python
  • Japanese Language Pack

歯車からこれを入れてましょう。検索して1クリックでインストールされます。

 

ターミナルをcmdにする

デフォルトはPower Shellなので、コマンドプロンプトがいい場合はこちらを。ターミナルを開いてcmdを選べOKです。

 

 

VS CODEの長短

長所

色分け、カッコ補完、実行も同画面できるのがよい。

短所

拡張機能ありき、設定変更も必要なので、ググる必要あり。情報はかなり転がっているので、困らないですが。

 

以前はプログラミング言語学習は躓く箇所が多くて、挫折しやすいイメージでしたが、今はぐっとハードルが下がりましたね。

 

連日+曜日を作成する


以下のような記述を作成したかったので、Pythonでやってみました。

2023-07-18 Tue
2023-07-19 Wed

コード

import datetime


mylist = [f"2023-08-1{i}" for i in range(1, 6)]


for i in mylist:
    hoge = i
    dte = datetime.datetime.strptime(hoge, '%Y-%m-%d')
    dte1 = dte.strftime('%a')
    dte2 = str(dte)
    new_date = datetime.datetime.strptime(dte2, '%Y-%m-%d %H:%M:%S').strftime('%Y/%m/%d')
    print(new_date, dte1)

2023/08/11 Fri
2023/08/12 Sat
2023/08/13 Sun
2023/08/14 Mon
2023/08/15 Tue

日付を作って、リストに入れる

日付をforループで作成します。mylistに格納します。参考にしたページも載せておきます。

mylist = [f"2023-08-1{i}" for i in range(1, 6)]

www.javadrive.jp

文字列を日付型に変換する

変数hogeにforループの展開を入れます。次に変数dteに文字列を日付型に変換して代入する。

for i in mylist:
    hoge = i
    dte = datetime.datetime.strptime(hoge, '%Y-%m-%d')

pg-chain.com

日付型から曜日を取得+日付型を文字列にする

dte1に関数(?)strftimeで曜日を代入します。

dte = datetime.datetime.strptime(hoge, '%Y-%m-%d')
dte1 = dte.strftime('%a')
dte2 = str(dte)
new_date = datetime.datetime.strptime(dte2, '%Y-%m-%d %H:%M:%S').strftime('%Y/%m/%d')
print(new_date, dte1)

qiita.com

時間が邪魔なときの対処法

https://qiita.com/daijiro_ma/items/8a62fbb0741e5bad8568

TypeError: strptime() argument 1 must be str, not datetime.datetimeの対処法

https://qiita.com/S_eki/items/574402720355fc979622

ここでdte2に日付型から文字列型にします。TypeErrorが出たので、ググってこれをやります。

最後に出力

最初の行で2023-07-18 00:00:00を2023/07/18に形式変更します。そして出力。

new_date = datetime.datetime.strptime(dte2, '%Y-%m-%d %H:%M:%S').strftime('%Y/%m/%d')
print(new_date, dte1)

これを作成するのに2時間くらいかかっていますが、身になったので良しとします。

Cisco I/Fのdescriptionを作成する


こんな感じで作るとラク

:~$ for i in {0..47}; do echo -e "int gi0/0/0/$i description Router1, int gi0/0/0/$i"; done
int gi0/0/0/0 description Router1, int gi0/0/0/0
int gi0/0/0/1 description Router1, int gi0/0/0/1
int gi0/0/0/2 description Router1, int gi0/0/0/2

改行も入れられるので、コンフィグも作れてたり。

~$ for i in {0..47}; do echo -e "int gi0/0/0/$i description Router1, int gi0/0/0/$i\nno shut\nipv4 address 10.0.0.$i 255.255.255.254"; done
int gi0/0/0/0 description Router1, int gi0/0/0/0
no shut
ipv4 address 10.0.0.0 255.255.255.254
int gi0/0/0/1 description Router1, int gi0/0/0/1
no shut
ipv4 address 10.0.0.1 255.255.255.254

こういう小ネタってなぜかあまりググっても出てこないんだよなぁ。

Pythonでも書けるので、一応載せておきます。これはpreconfigureを削除するためのものですが、シングルクォーテーション部分を書き換えればいろいろ応用が利くはず。

for i in range(0,24):
    print(f'no interface preconfigure TenGigE 0/0/0/{i}')

#実行結果
no interface preconfigure TenGigE 0/0/0/0
.
.
.
no interface preconfigure TenGigE 0/0/0/23