정규 표현식을 사용하여 검색 및 삭제

정규 표현식을 사용하여 검색 및 삭제

bash에서 정규식을 사용하여 주어진 문자열을 검색하고 특정 단어의 발생을 제거하는 방법은 무엇입니까? 이런 표현이 나오더라구요

^([A-Za-z-]+)(-).*(el6.*)$

내가 달성하고 싶은 것은 와 같은 특정 문자열에서 cjkuni-ukai-fonts-0.2.20080216.1-35.el6.noarch표현식이 제거되고 cjkuni-ukai-fonts-el6.noarch만 남아 있어야 한다는 것입니다 0.2.20080216.1-35. 내 시스템에 설치할 수 있는 것이 매우 제한되어 있기 때문에 perl이나 기타 기본이 아닌 명령을 사용할 수 없습니다. 어떤 도움이라도 대단히 감사하겠습니다.

추신: sed를 시도했지만 제대로 작동하지 못했습니다.

답변1

정말로 순수 bash에서 이 작업을 수행해야 한다면:

$ foo="cjkuni-ukai-fonts-0.2.20080216.1-35.el6.noarch"
$ [[ $foo =~ [0-9.]+-[0-9]* ]] && echo $BASH_REMATCH
0.2.20080216.1-35

솔루션에 만족하는 경우 sed:

$ sed 's/.*-\([0-9.]*-[0-9]*\).*/\1/' <<<$foo
0.2.20080216.1-35

GNU에 액세스할 수 있는 경우 grep다음을 수행할 수도 있습니다.

$ grep -oE -- '[0-9.]+-[0-9]*' <<<$foo
0.2.20080216.1-35

또는

$ grep -oP -- '[.\d]+-\d+' <<<$foo
0.2.20080216.1-35

마지막으로 CentOS를 실행하고 있으므로 Perl을 설치하는 것이 상당히 안전하므로 대신 다음을 수행할 수 있습니다.

$ perl -pe 's/.*?([0-9.]+-[0-9]*).*/$1/' <<<$foo
0.2.20080216.1-35

관련 정보