2017-10-19 33 views
2

MACアドレスをsedと解析しようとしていますが、説明できないことに直面しました。sedとMACアドレスの解析

はここで2例がある - 良いと間違っている: - それは適切に文字列に解析返し

# echo "tadam" | sed -r 's/^([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2})$/\1_\2_\3_\4_\5_\6/' 
tadam 

最初の例が正常に動作している:

良い1:

# echo "01:23:45:67:89:ab" | sed -r 's/^([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2})$/\1_\2_\3_\4_\5_\6/' 
01_23_45_67_89_ab 

間違ったもの。しかし、どのように2番目のものを説明する?この文字列がte regexpと一致しないうちにsedが文字列(tadam)を返すのはなぜですか?

誰でも説明できますか?正規表現が文字列に一致しないときにsedが何も返さない状況を達成したいと思います。どうやってするの?

答えて

2

sedのデフォルト設定は完全なパターンスペースを印刷することです。

追加オプション-n(パターンスペースの印刷を抑制)とaddコマンドp(現在のパターンスペースを印刷する):何かを交換することができれば、今のsed

echo "..." | sed -r -n 's/.../.../p' 

は、パターン・スペースを出力します。

関連する問題