日期:2014-05-16  浏览次数:20556 次

awk 或sed的问题,字符串替换
文件中字段大体如下
<KPI_ID="3221212" KPI_NAME="GPRS附着请求次数" DB_FIELD="AttGprsAttach" TYPE="number"/>
<KPI KPI_ID="3221312" KPI_NAME="GPRS附着拒绝次数" DB_FIELD="FailedGprsAttach" TYPE="number"/>
<KPI KPI_ID="3221412" KPI_NAME="GPRS附着成功率" DB_FIELD="RateSuccGprsAttach" TYPE="number"/>

我想达到的效果是,把其中包含“……次数”的行中的DB_FIELD="???"字段全部改为DB_FIELD="trunc(???)",其他不包含“……次数”的行不修改

------解决方案--------------------
sed -i "/GPRS.*次数/{s/DB_FIELD=\"\(.*\)\" /DB_FILED=\"trunc(\1)\" /}" filename
------解决方案--------------------
探讨

sed -i "/GPRS.*次数/{s/DB_FIELD=\"\(.*\)\" /DB_FILED=\"trunc(\1)\" /}" filename

------解决方案--------------------
http://blog.csdn.net/zg_hover/archive/2007/09/28/1804481.aspx
------解决方案--------------------
sed -i "s/DB_FIELD=\"\(.*\)\" TYPE/DB_FIELD=\"trunc(\1)\" TYPE/g" filename

s/字符串1/字符串2/g 在全文搜索,将字符串1替换成字符串2

\(.*\) 向后引用,在字符串2中可调用\1引用

\"为转义字符"

根据情况 DB_FIELD="AttGprsAttach" TYPE
字符串1为DB_FIELD=\"\(.*\)\" TYPE
字符串2为DB_FIELD=\"trunc(\1) TYPE

sed -i "/GPRS.*次数/{s/DB_FIELD=\"\(.*\)\" TYPE/DB_FIELD=\"trunc(\1)\" TYPE/g}" filename