한 줄에서 두 키워드 사이에 나타나는 단어를 추출하는 방법은 무엇입니까? [복사]

한 줄에서 두 키워드 사이에 나타나는 단어를 추출하는 방법은 무엇입니까? [복사]

아래에 언급된 코드가 있다고 가정해 보겠습니다.

module dut#(parameter type tp =int, tp x = 12 ) (int r , reg [7:0] rg);
endmodule

module mid (int r, reg [7:0] rg);
endmodule

module bin (int z, logix s);
endmodule

module med;
endmodule

키워드 뒤 와 기호 앞 의 단어 인 , 및 단어 중 먼저 나오는 단어 dut를 추출하고 싶습니다 .midbinmedmodule#(;

csh스크립트만 사용하여 이 작업을 수행 하고 싶습니다 . 이 목적으로 어떤 정규 표현식을 사용할 수 있나요?

답변1

(gnu)grep을 사용하십시오:

 grep -Po 'module +\K\w+' file

답변2

또 다른 솔루션은 다음을 사용합니다 sed.

$ sed -nE 's/^module +([^ (#;]+) *[#(;].*$/\1/p' filename
dut
mid
bin

s() 전체 줄을 괄호 안의 표현식으로 바꿔서 모듈 이름을 추출합니다.

지금,

  • ^module"모듈"( )로 시작하고 하나 이상의 공백( +)이 뒤따른 다음 하나 이상의 문자로 구성된 문자열을 찾습니다.공간이 아니 (거나 #,;. 문자열은 해당 사양이 [^ (#;]+괄호 안에 배치되므로 "캡처 그룹"에 배치됩니다 ( ... ). 그런 다음 정규식은 0개 이상의 공백( *), a #, a (또는 a ;( [#(;]), 그리고 줄 끝까지( .*$)까지의 임의 문자 수를 강제로 적용하여 해당 줄이 일치하는 것으로 간주됩니다.
  • 일치하는 항목이 발견되면 대체 항목이 인쇄되지만( p) 이 -n옵션을 사용하면 기본적으로 일치하지 않는 행이 인쇄되지 않습니다.

정규식에 대해 더 자세히 알고 싶다면 다음을 살펴보세요.여기예를 들어

답변3

무슨 뜻인지 잘 모르겠습니다 only using csh script. 표준 절차를 사용할 수 있습니까? 그렇다면:

가장 간단한 솔루션나를 위한grep및 을(를) 사용하고 있습니다 awk.

grep "module \w*" -o filename | awk '{print $2}'
dut
mid
bin

답변4

그리고 awk:

$ awk -F'[ \t#(;]+' '/^module/{ print $2}' infile
dut
mid
bin
med

\t구분 기호가 공백/Tab // #또는 문자 중 하나인 두 번째 필드를 인쇄하고 ;중복 (을 무시합니다( +).

관련 정보