2016-09-29 2 views
-3

NFIN=4W=4N으로 바꿔 파일의 문자열 일부를 대체하고 싶습니다. NFIN=4의 숫자 부분에서 숫자는 임의의 int 또는 float 값이 될 수 있습니다. 입력이 NFIN=3.0 인 경우 출력은 W=3.0이어야합니다. 음수가 없으며 3 또는 3.0입니다. 예를 들어, 입력 라인 :SED/AWK를 사용하여 문자열 바꾸기

XMPparasitic2 VDD:F86 VDD:F87 VDD:F88 VNW pch_lvt_mac L=8N NFIN=4 ODIND=5 

출력이되어야 :

XMPparasitic2 VDD:F86 VDD:F87 VDD:F88 VNW pch_lvt_mac L=8N W=4N ODIND=5 
+0

을하면 돈 음의 지수를 갖는 음수가 의도된다는 것을 의미하지 않는다. –

+0

sed -E -inplace 's/\ bNFIN = ([[: digit :]] +) \ b/W = \ 1N /'PREICG_X1M_AH360TL_C8_ARCH_3_4.lpeSpc – metalboy

+0

이것은 숫자 매칭 정규 표현식을 훨씬 더 복잡하게 만듭니다. 기본은 동일합니다. NFIN 항목이 처음 (줄기 시작)이나 줄 끝 부분에 나타날 수 있습니까? 그것이 항상 라인의 중간에 있다면, 그것도 인생을 더 쉽게 만듭니다. 숫자가 항상 유효한 경우 (예를 들어, 변경해서는 안되는'NFIN = Aleph-Null'과 같은 항목이 없다면),'NFIN ='이후의 숫자라는 사실은 거의 중요하지 않게됩니다. regexes로 노는 것은 순수 예술이다; 당신은 너무 많이하거나 너무 적게하지 않고 원하는 것을 할 수있을 정도로 유연한 것을 원합니다. 귀하의 데이터를 아십시오! –

답변

0

당신은 수치 데이터와 일치하도록이 sed 명령을 사용할 수 있습니다

cat file 
XMPparasitic2 VDD:F86 VDD:F87 VDD:F88 VNW pch_lvt_mac L=8N NFIN=4 ODIND=5 
XMPparasitic2 VDD:F86 VDD:F87 VDD:F88 VNW pch_lvt_mac L=8N NFIN=FOO ODIND=5 
XMPparasitic2 VDD:F86 VDD:F87 VDD:F88 VNW pch_lvt_mac L=8N NFIN=4.0 ODIND=5 

sed -E 's/NFIN=([0-9]+\.[0-9]+)/W=\1/g; s/NFIN=([0-9]+)/W=\1N/g' file 
XMPparasitic2 VDD:F86 VDD:F87 VDD:F88 VNW pch_lvt_mac L=8N W=4N ODIND=5 
XMPparasitic2 VDD:F86 VDD:F87 VDD:F88 VNW pch_lvt_mac L=8N NFIN=FOO ODIND=5 
XMPparasitic2 VDD:F86 VDD:F87 VDD:F88 VNW pch_lvt_mac L=8N W=4.0 ODIND=5 
+0

@metalboy : 지금이 작업을 수행 했습니까? – anubhava

-2
sed -E 's/NFIN=([0-9]+(\.[0-9]+)?)/W=\1N/' file 
+1

이 코드는 문제를 해결하는 데 도움이 될 수 있지만 _why_ 및/또는 _how_는 질문에 대답하지 않습니다. 불쌍한 질문에만 열악한 대답을해서는 안됩니다. 그건 아무도 돕지 않아. –

관련 문제