使用SED/AWK替换字符串
问题描述:
我想替换文件中字符串的一部分,即将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
答
您可以使用此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
答
sed -E 's/NFIN=([0-9]+(\.[0-9]+)?)/W=\1N/' file
+1
虽然这段代码可能有助于解决问题,但它并没有解释_why_和/或_how_它是如何回答问题的。不好的问题不应该只给出可怜的答案;这有助于任何人。 –
如果你不这并不意味着具有负指数的负数是有意的,然后适当更新问题。 –
sed -E -inplace's/\ bNFIN =([[:digit:]] +)\ b/W = \ 1N /'PREICG_X1M_AH360TL_C8_ARCH_3_4.lpeSpc – metalboy
这很重要,因为它使得数匹配的正则表达式更加复杂,但基础是一样的。 NFIN条目是否曾经出现过(不太可能)或行尾?如果它总是在一条线的中间,那也会让生活变得更容易。如果数字总是有效的(例如,永远不会有像'NFIN = Aleph-Null'那样不应该被改变的条目),那么它在'NFIN ='之后的数字的事实在很大程度上变得不重要。使用正则表达式是一种美术;你希望有足够的灵活性去做你想做的事,而不要做太多或太少。了解你的数据! –