スイッチからいくつかの情報を抽出するexpecスクリプトによって生成されたテキストファイルを解析しようとしています。
以下はサンプル出力です。
192 0000.0000.0000 1/g23 Dynamic
192 0000.0000.0000 ch1 Dynamic
192 0000.0000.0000 ch1 Dynamic
192 0000.0000.0000 ch1 Dynamic
そのテキストファイルには、私が興味のない他のジャンクファイルがたくさんあります。上記の例では、スイッチ番号とポート(「1 / g23」)を含む行のみが必要です。
"/ g"パターンを含む行を抽出するためにファイルに対してgrepを実行しましたが、正しく機能しました。
今私が望むのは、2つの列だけです。私はawkを使って列を印刷します。
0000.0000.0000 1/g23
もう終わったので「。」に乗りたい。 sedはこれでうまく動作します
000000000000 1/g23
ここでは、最初の列をMACアドレス形式に変換したいと思います。
So this
000000000000 1/g23
Becomes this
00:00:00:00:00:00 1/g23
これを行うsedコマンドが見つかりました。しかし、私の問題は、最初の列でこれを行うだけです。 MACとポート間の接続を失うことなく、1つの列だけを編集する方法がわかりません。
grep -e "/g" switch6output | awk '{print $2,$3}' | sed 's/\.//g' | sed 's/../&:/g;s/:$//'
私はこれが非常に愚かなアプローチであると確信していますが、これが私が思いつくための最善の方法です。 MACとポートの接続を失うことなく必要な作業を実行するためのより信頼性の高い方法はありますか?
ありがとうございます。
答え1
単にawkを直接使用してください:
awk '/\/g/ {
gsub(/\./, "", $2)
gsub(/../, "&:", $2)
sub(/:$/, "", $2)
print $2,$3
}'
このソリューションを使用するgrep
とsed
。
答え2
例sed
:
sed -r '\=1/g23=!d;
s/[^ ]* *//;
s/ *[^ ]* *$//;
s/(..)\.(..)/:\1:\2:/g;
s/::/:/'
入力にスペースの代わりにタブが含まれている場合は、式を調整する必要があります。