LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 773|回复: 5

如何替换一行中某段不固定串?

[复制链接]
发表于 2006-12-14 17:27:36 | 显示全部楼层 |阅读模式
有一个文件内容如下:
97897|string|abc1234|string1|string2a
sd3424|stringa|abc112309|string12|string2b
wer456|stringb|abc543234|string13|string2c
ert676|stringc|abc23478|string14|string2d

如何写脚本替换第2个“|”和第3个“|”之间的内容为“ABC”。
发表于 2006-12-14 18:06:41 | 显示全部楼层
awk 'BEGIN { FS="|" ; OFS="|" ;} { print $1,$2,"ABC",$4,$5 }' filename
回复 支持 反对

使用道具 举报

发表于 2006-12-14 18:20:35 | 显示全部楼层
awk -F"|" 'OFS="|"{ $3="ABC";print $0 }' filename
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-14 18:25:30 | 显示全部楼层
这个是个好方法,如果一行记录有100段,那脚本写出来就特别长了吧。

多谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-14 18:25:47 | 显示全部楼层
这个是个好方法,如果一行记录有100段,那脚本写出来就特别长了吧。

多谢回复。
回复 支持 反对

使用道具 举报

发表于 2006-12-14 19:52:30 | 显示全部楼层
Post by risingsun
这个是个好方法,如果一行记录有100段,那脚本写出来就特别长了吧。

多谢回复。


不会有多复杂


  1. [0 No.2060 huan@huan ~/tmp]$ cat txt
  2. 1|2|3|4|555
  3. a|b|c|d|eee

  4. [0 No.2061 huan@huan ~/tmp]$ perl -pe 's/^((?:.*?\|){1}).*?(\|.*)/$1ABC$2/' txt
  5. 1|ABC|3|4|555
  6. a|ABC|c|d|eee

  7. [0 No.2062 huan@huan ~/tmp]$ perl -pe 's/^((?:.*?\|){2}).*?(\|.*)/$1ABC$2/' txt
  8. 1|2|ABC|4|555
  9. a|b|ABC|d|eee

  10. [0 No.2063 huan@huan ~/tmp]$ perl -pe 's/^((?:.*?\|){3}).*?(\|.*)/$1ABC$2/' txt
  11. 1|2|3|ABC|555
  12. a|b|c|ABC|eee

复制代码

sed也可以实现
只不过不喜欢看到那一堆转义符,呵
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表