システムをWeb化したのはいいが、自動化のためブラウザをSeleniumで動かすなんて、地獄ですからね …「途中で止まるんですけど!」「勝手にid変わってる!」
極力、GUIを自動化するのはやめて、CSVやテキストで出力し、GASでGoogle Siteに出力、というようなスマートな方法を採りたいものです。
今回の記事では、下記のようなファイルから、例としてSendaiServerのアドレス(192.168.120.3)だけを抜き出したい場合…
- FukushimaServer,192.168.10.2
- SendaiServer,192.168.120.3
- TokyoServer,192.168.1.1
この処理を、Linux/Python/Powershellそれぞれ紹介していきます。
1.Linux grepでファイル内の文字を検索する
- grep "SendaiServer" sample_server_list.txt | cut -d , -f2
パイプの後はawkでもsetでも。ワンライナーでシンプル。ただ、可視性とか検索した文字を利用して色々…となると後者のやり方にもメリットが見えてきます。
2.Python版
- myPath = "C:/myApps/python/sample_server_list.txt"
- with open(myPath, 'r', encoding='utf-8') as file:
- lines = file.readlines()
- for line in lines:
- if line.startswith("SendaiServer"):
- address = line.strip().split(",")[1]
- print(address)
For Eachで回すので、一番汚いコードだと思う…。綺麗なやり方ご存知でしょうか?
withによるファイルオープンではブロックの最後に必ずファイルが閉じられるので、このやり方を推薦します。また、readlinesでは改行コードも入ってしまうので、strip()で抜いた後にsplit()します。
3.PowerShell版
- $finder = Select-String -Path $PSScriptRoot\sample_server_list.txt -Pattern "SendaiServer";
- $address = $finder.line.Split(",")[1];
- Write-Output $address;
Select-Stringはgrepと同じような動作をしますが、帰ってくるのはオブジェクト(MatchInfo Class)なので、その中のlineを抜き出して、Splitする必要があります。
普通に$finder.ToStringを出力すると、「ファイル名:行:見つかった行」とコロン区切りで色々な情報が入ってくるので、これをコロン区切りのSplitで分割して…というのは初心者の陥る罠です。でも、うん、分かります…Select-Stringって言ってますからね!
0 件のコメント:
コメントを投稿