2017-09-22 5 views
1

私はackをよく使用しますが、私が発見できなかったことは、出力パラメータを使用するときに新しい行を追加する方法です。出力パラメータと改行を含むPerl ackツール

echo 'name=Joe,id=123' | ack '^name=(\w+),id=(\d+)' --output="User name: $1\nUser ID: $2" 

私は

User name: Joe 
User ID: 123 

を期待するが、私はackは出力に改行文字を尊重するためにとにかく

User name: Joe\nUser ID: 123 

を取得しますか?

おかげ

+0

--output='User name: $1\nUser ID: $2' 

を交換 'ack'とは何の関係もありません。 '\ n'の代わりに改行を渡します。あなたは何の殻を求めていますか? – ikegami

答えて

3

のような議論を参照してくださいする可能性があることを

a 
b 

注意ack改行の代わりに。

--output='User name: $1 
User ID: $2' 

または

--output="$(printf 'User name: $1\nUser ID: $2')" 

または

--output=$'User name: $1\nUser ID: $2'     # bash 
2

あなたは@{[ … ]}補間を経て、その文字列に任意のコードを置くことができます。なんらかの理由で文字通り"\n"文字列は機能しませんが、chr 0x0Aまたは$/となります。

例:

$ echo a b | ack '(\w+)\s+(\w+)' --output '[email protected]{[ chr 0x0A ]}$2' 

出力:この種の機能は、将来的に破るも、あなたがに\nを渡しているhttps://github.com/beyondgrep/ack2/issues/531

+2

ここにackの著者。 '@ {[...]}'は現在開発中のack 3では絶対に動作しません。あまりにも危険です。 '--output'でできることを厳しく制限しました。 –

関連する問題