다음 패턴 라인이 포함된 파일이 있습니다.
136x2340+1564+0
그건, <N1>x<N2>+<N3>+<N4>
.
에서 까지의 grep
모든 행을 필터링하고 싶습니다(아마도 사용 ).N1
a
b
그리고 N2
범위는 c
~ 입니다 d
.
상수는 a,b,c,d
내 문제에 따라 다릅니다. 스크립트에서 수정하겠습니다.
시도했지만 egrep '^([0-9][0-9][0-9]x[0-9][0-9][0-9]+)'
출력이 표시됩니다.
136x2340+1564+0
835x428+355+1780
817x406+186+747
114x1533+1256+456
N2
즉, 4자리의 행도 표시됩니다 (3자리만 있는 것 같습니다).
편집하다:또한 (쉼표)로, 첫 번째 기호를 (공백)으로 , 두 번째 기호를 (쉼표) x
로 바꾸고 싶으 므로 출력은 다음과 같아야 합니다.,
+
+
,
N1,N2 N3,N4
답변1
grep ERE(확장 정규 표현식) 구문에서 +
"하나 이상의 선행 원자"를 의미하는 수량자입니다. 이 컨텍스트에서 리터럴 일치를 수행 하려면 +
이를 이스케이프해야 합니다.
egrep '^([0-9][0-9][0-9]x[0-9][0-9][0-9]\+)' file
835x428+355+1780
817x406+186+747
당신이하고 싶다면바꾸다, grep
실제로는 올바른 도구가 아닙니다. 하지만 버전에 sed
유사한 확장 정규식 패턴이 있는 경우 다음과 같이 사용할 수 있습니다.
sed -En 's/([0-9]{3})x([0-9]{3})\+([0-9]{1,})\+([0-9]{1,})/\1,\2 \3,\4/p' file
835,428 355,1780
817,406 186,747
기본 정규식만 있는 경우 이스케이프를 읽기가 더 어려워집니다.
sed -n 's/\([0-9]\{3\}\)x\([0-9]\{3\}\)+\([0-9]\{1,\}\)+\([0-9]\{1,\}\)/\1,\2 \3,\4/p' file
835,428 355,1780
817,406 186,747