システムを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それぞれ紹介していきます。
Linux grepでファイル内の文字を検索する
grep "SendaiServer" sample_server_list.txt | cut -d , -f2
パイプの後はawkでもsetでも。ワンライナーでシンプル。ただ、可視性とか検索した文字を利用して色々…となると後者のやり方にもメリットが見えてきます。
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()します。
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 件のコメント:
コメントを投稿