2017-10-28 7 views
0
hashrate=${line//*:/} 
hashrate=${hashrate//H\/s/} 

내가이 정규식은 단일 명령으로 대체 통합하기 위해 노력하고있어, 무엇인가가 :배쉬 패턴 매칭 '또는'사용 쉘 매개 변수 확장

hashrate=${line//*:\+/H\/s/} 

그러나,이 마지막 옵션이 작동하지 않습니다. 나는 또한 \|으로 시도했지만 작동하지 않는 것으로 보이며 bash 매뉴얼과 문서에서 유용한 것을 찾지 못했습니다. 내 문제를 해결하는 경우에도 sed 대신 ${}을 사용해야합니다.

hashrate="${line//*(*:|H\/s)/}" 
+2

정규 표현식이 아니라 glob 패턴임을 알아 두는 것이 중요합니다. –

+0

맞아, 그들은 꽤 비슷해. 그래서 나는 혼란 스러웠다. 고마워. – aegroto

답변

1

, 당신은 0 개 이상의 글로브 패턴과 일치하는 *(pattern1|pattern2|...) 연산자를 사용할 수 있습니다)이며, @(pattern|pattern...)입니다. 귀하의 경우를 들어 : 당신은 단지 그것을 대체하는 대신 패턴을 제거하면

${line//@(*:|H\/s)} 

후행 /는 선택 사항입니다.

이중 슬래시 인 //으로 인해 패턴의 모든 항목이 한 번에 하나씩 제거됩니다. *(...) (randomir의 답변 참조)을 사용하면 연속 패턴이 모두 한 번에 제거됩니다. 거대한 줄이 없다면 그 차이는 무시할 수 있어야합니다. (거대한 문자열이 있다면 어쨌든 globbing을 사용하지 않으려합니다.

+0

완벽하게 작동합니다. 감사합니다! – aegroto

+0

당신을 환영합니다! 기꺼이 도와주세요. – randomir

1

확장 대체 (globbing)을 가정 쉘 패턴 (의 교대가, shopt -s extglob가 활성화되어 : 당신이 (shopt를 통해 extglob) extended globbing을 사용하는 경우

+0

이 설명을 주셔서 감사합니다. – aegroto