2017-09-22 9 views
1

나는 자주 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 3에서 절대 작동하지 않을 것입니다. 너무 위험합니다. '--output'으로 할 수있는 일을 심각하게 제한했습니다. –