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