2017-12-21 19 views
1
私は最初からすべての文字列を抽出するためにフィルタを交換する正規表現を使用しようとしている

が最後の前方までのsedとLinuxからのansible regex_replaceのフィルタスラッシュ

これを大幅に削減することは働いている:

echo /a/b/c.log | sed 's/\(.*\)\/.*/\1/' 
output: /a/b 

しかしansibleを使用する:

"{{log_path | regex_replace('s/\(.*\)\/.*/\', '1/')}}" 

備考:開き、log_pathは/a/b/c.log

のような完全なパスを記録していvarがあります

例外:次のようなの

私は取得していますエラーが引用されたスカラーを解析中

は、私はそのように気にいらを行うことができることを知って、未知のエスケープ文字

が見つかりました:「{{ log_path.split( '/')[0:-1] |参加する( '/')}}」

が、私は正規表現を好む

私が間違ってやっている任意のアイデア?

答えて

0

ansibleためsed構文(s/pattern/replacement/)を使用しないでください。ただ置きますPythonのPCRE/ansibleは、以前のものとはかなり異なっています。私はあなたが、私はsedの恋人ですが、私はsedではなく、Pythonであなたの正規表現を開発することをお勧めします。

実際にあなたの問題はそれらのどれもではありませんが、パターンが間違っています。あなたの問題は、閉じている一重引用符をエスケープしていることです。しかし、これらすべてのバックスラッシュでは見えにくいです。

これは、あなたは正しい方向に始める必要があります。

"{{log_path | regex_replace('(.*)/.*/', '\1')}}" 

http://docs.ansible.com/ansible/latest/replace_module.htmlは、底部に向かっより多くの例があります。

+0

あなたの答えに感謝します。もし私がエラーに遭遇しているなら "例外:ダブルクォートのスカラーをスキャンしている間" – dsaydon