2016-09-29 167 views
-3

我想替換文件中字符串的一部分,即將NFIN=4替換爲W=4N。 請注意,在NFIN=4的數字部分中,數字可以是任何整數或浮點值;如果輸入爲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 ='之後的數字的事實在很大程度上變得不重要。使用正則表達式是一種美術;你希望有足夠的靈活性去做你想做的事,而不要做太多或太少。瞭解你的數據! –

回答

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_它是如何回答問題的。不好的問題不應該只給出可憐的答案;這有助於任何人。 –