아래에 언급된 코드가 있다고 가정해 보겠습니다.
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
를 추출하고 싶습니다 .mid
bin
med
module
#
(
;
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 // #
또는 문자 중 하나인 두 번째 필드를 인쇄하고 ;
중복 (
을 무시합니다( +
).