只需用awk,sed的的-i的好处远远由SED问题与使用shell变量,如抵销您当前所看到的:“”
INPUT_FILE_NAME_PATH="/app/csa/sumit/xyz.out"
awk -v file="$InputFile" -v path="$INPUT_FILE_NAME_PATH" '
{ gsub("^"file"=.*", file"="path); print }
' dashboard.prf > tmp && mv tmp dashboard.prf
需要注意的是,像任何SED解决方案,上面用正则表达式上下文中的$ INPUTFILE变量,所以如果thatvariable包含像RE元字符,那么你可以得到不需要的匹配,例如“foo.bar”会匹配“fooXbar”以及“foo.bar”。在sed中没有可靠的解决方案(不要听任何人告诉你逃脱RE元字符,因为它不能可靠地完成),但在AWK你可以使用索引()来匹配字符串而不是一个正则表达式,如:
awk -v file="$InputFile" -v path="$INPUT_FILE_NAME_PATH" '
index($0,file"=")==1{ $0 = file"="path) } { print }
' dashboard.prf > tmp && mv tmp dashboard.prf
我会用“指数( )“的方法,如果在你的输入文件内容发生变化时,你将来会避免任何意外。
如果你的awk不支持-v分配变量,则:
awk '
index($0,file"=")==1{ $0 = file"="path) } { print }
' file="$InputFile" path="$INPUT_FILE_NAME_PATH" dashboard.prf > tmp && mv tmp dashboard.prf
,或者如果你满意的一个sed的解决方案,那么你一定要幸福与基于RE-解决方案,以便:
awk '
{ gsub("^"file"=.*", file"="path); print }
' file="$InputFile" path="$INPUT_FILE_NAME_PATH" dashboard.prf > tmp && mv tmp dashboard.prf
终于在这里是为高尔夫球爱好者RE基解决方案:
awk '{gsub("^"f"=.*",f"="p)}1' f="$InputFile" p="$INPUT_FILE_NAME_PATH" dashboard.prf > tmp && mv tmp dashboard.prf
里面使用'sed'变量,你需要把它包'''而不是'''。 – fedorqui 2013-05-02 12:56:49
您可以使用'@'而不是'/'作为sed中's'运算符的分隔符。请记住,'$'是行尾特殊字符,所以它可能不会做你认为它的事 – Petesh 2013-05-02 12:58:52
谢谢fedorqui ...我已经更新了代码..但它仍然不工作 – 2013-05-02 13:00:27