Chinaunix

标题: %%%%求shell 替换文件 [打印本页]

作者: wangqi0021    时间: 2010-05-26 15:03
标题: %%%%求shell 替换文件
比如 文件内容是


abc"2010.4.5.6"
sakjdhksahdkajd"sadsada.asdsad"
asdasdasd"213213"


将第一行的最后一个.和"之间的内容替换掉
作者: Shell_HAT    时间: 2010-05-26 15:08
看不懂你的描述。以顶楼的数据为例,你想得到的结果是啥?
作者: wangqi0021    时间: 2010-05-26 15:10
看不懂你的描述。以顶楼的数据为例,你想得到的结果是啥?
Shell_HAT 发表于 2010-05-26 15:08



    结果是设置一个循环 每次让第一行的最后一个6自增 并记录进文件
作者: lkk2003rty    时间: 2010-05-26 15:15
本帖最后由 lkk2003rty 于 2010-05-26 15:18 编辑

王总好。。。但是。。。还是没看懂。。。。
把6变成几?
作者: wangqi0021    时间: 2010-05-26 15:26
王总好。。。但是。。。还是没看懂。。。。
把6变成几?
lkk2003rty 发表于 2010-05-26 15:15



变成一个变量里边的值
作者: lkk2003rty    时间: 2010-05-26 15:35
  1. awk -v var="${cnt}" -F"." 'BEGIN{OFS="."}NR==1{$NF=var"\""}1' file
复制代码
这样?
作者: where27    时间: 2010-05-26 15:36
回复 5# wangqi0021
  1. awk -F'[.\"]' -v a=4 'NR==1{sub($(NF-1),a)}1' file
复制代码
把a=4改成你想要换成的值
作者: wangqi0021    时间: 2010-05-26 15:40
回复  wangqi0021 把a=4改成你想要换成的值
where27 发表于 2010-05-26 15:36



    没起作用  麻烦再帮忙看下
作者: wangqi0021    时间: 2010-05-26 15:43
这样?
lkk2003rty 发表于 2010-05-26 15:35



    这个输出之后把要替换的位置删除了  没有保存进文件
作者: where27    时间: 2010-05-26 15:43
回复 8# wangqi0021
  1. ZB-MVS-LIVE8:~/ # more file
  2. abc"2010.4.5.6"
  3. sakjdhksahdkajd"sadsada.asdsad"
  4. asdasdasd"213213"
  5. ZB-MVS-LIVE8:~/ # awk -F'[.\"]' -v a=4 'NR==1{sub($(NF-1),a)}1' file
  6. abc"2010.4.5.4"
  7. sakjdhksahdkajd"sadsada.asdsad"
  8. asdasdasd"213213"
  9. ZB-MVS-LIVE8:~/ # awk --version
  10. GNU Awk 3.1.3
复制代码
我这是可以的啊
作者: wangqi0021    时间: 2010-05-26 15:44
这样?
lkk2003rty 发表于 2010-05-26 15:35



    这个对了 但是没有保存进文件啊
作者: lkk2003rty    时间: 2010-05-26 15:45
回复 11# wangqi0021


    重定向下  然后替换文件就是了。。。
作者: wangqi0021    时间: 2010-05-26 15:46
回复  wangqi0021 我这是可以的啊
where27 发表于 2010-05-26 15:43



    我这确实不行
作者: where27    时间: 2010-05-26 15:49
回复 13# wangqi0021


    奇怪了,可能是版本的原因,那你就用上面那位帅哥的吧
作者: wangqi0021    时间: 2010-05-26 15:51
回复  wangqi0021


    重定向下  然后替换文件就是了。。。
lkk2003rty 发表于 2010-05-26 15:45



    重定向之后原来的 \r\n都没有了....
作者: wangqi0021    时间: 2010-05-26 15:52
回复  wangqi0021


    奇怪了,可能是版本的原因,那你就用上面那位帅哥的吧
where27 发表于 2010-05-26 15:49



    可能吧 我这是awk 3.1.1
作者: wangqi0021    时间: 2010-05-26 15:53
还得把空格替换成\n  是不是  sed STRING s/ /'\n'/g 啊?
作者: lkk2003rty    时间: 2010-05-26 15:56
回复 17# wangqi0021


    把整个文件中的空格替换成回车
  1. sed -i 's/ /\n/g' file
复制代码
这个会把源文件给改了
王总可以先不加-i参数确定好使后再加上-i参数
作者: where27    时间: 2010-05-26 15:59
回复 18# lkk2003rty

小诀窍
  1. sed -ibak 's/ /\n/g' file
复制代码
这样源文件被修改了,还会生成一个原来文件的备份file.bak,抄袭黑哥的
作者: wangqi0021    时间: 2010-05-26 16:03
本帖最后由 wangqi0021 于 2010-05-26 16:11 编辑

多谢各位


不过还有点小问题

可不可以 不要把所有空格都替换 只替换每一行最后一个空格
作者: wangqi0021    时间: 2010-05-26 16:23
不对 没有行的概念了    这应该咋办呢
作者: wangqi0021    时间: 2010-05-26 16:25
应该是替换所有"后面的空格
作者: lkk2003rty    时间: 2010-05-26 17:47
回复 22# wangqi0021


    啥?俺理解了下 是不是这个?
  1. sed  's/ \([^ ]*$\)/\n\1/' file
复制代码

作者: lkk2003rty    时间: 2010-05-26 17:48
囧 理解貌似错了 。。。。。。
作者: lkk2003rty    时间: 2010-05-26 17:49
回复 19# where27


    学习学习  种菜兄 这招好。。。谢谢哈。。。。。
作者: lkk2003rty    时间: 2010-05-26 19:59
  1. awk -F'"' 'NF>1{printf "%s\"",$1;a=split($2,b," ");for(i=1;i<a;i++) printf "%s\n",b[i];printf "%s\"\n",b[a];next}1' file
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2