
줄 끝에서 시작하여 두 점 뒤로 돌아가는 모든 텍스트를 제거하려면 정규식을 사용해야 합니다.
gtk2-2.24.22-2.fc20.x86_64
된다
gtk2-2.24.22-2
이것은 텍스트 파일의 출력 rpm -qa
이므로 끝 부분을 잘라야 합니다.
답변1
당신은 ~필요정규식? 나는 이것이 약간 저렴한 해결책이라는 것을 알고 있지만 정규 표현식이 모든 것에 대한 해결책은 아닙니다.
예를 들어 Bash 문자열 조작의 경우:
foo="gtk2-2.24.22-2.fc20.x86_64"
echo ${foo%.*.*} # strip the longest match from the last dot
반환합니다 gtk2-2.24.22-2
.
다음과 같이 파일에서 이를 호출할 수 있습니다.
foo=$(head -1 file.txt)
echo ${foo%.*.*} > new-file.txt
정규식은 왼쪽에서 오른쪽으로 "탐욕스러운" 방식으로 소비하므로 뒤에서부터가 아니라 처음부터 무언가를 구문 분석하는 데 좋습니다. 가능하지만 간단한 Bash에서 수행할 수 있는 것보다 좀 더 장황해야 합니다.
Bash( )에서 정규식처럼 보이는 것은 .*
"실제" 정규식이 아닙니다. 실제 정규식에서 점은 .
모든 문자를 나타내며, 이는 *
이전 문자(그룹)가 0~n번 반복된다는 의미입니다. 그러나 Bash에서 점은 .
실제 점을 의미하며 *
모든 문자에 대한 와일드카드입니다.