Chinaunix首页 | 论坛 | 博客
  • 博客访问: 329732
  • 博文数量: 172
  • 博客积分: 2967
  • 博客等级: 少校
  • 技术积分: 1805
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-09 13:31
文章分类

全部博文(172)

文章存档

2014年(6)

2013年(45)

2012年(120)

2011年(1)

我的朋友

分类: LINUX

2013-04-18 17:45:45

shell 文件插入

2010-01-30 02:31 | 分类: | 浏览865次
a.txt
test1 kdfj
test2 dfsdj
test3 dkfjs
b.txt
h1
b2
c3
现在想把b.txt的内容插入到a,行与行要对应,插入后的效果:
h1 test1 kdfj
b2 test2 dfsdj
c3 test3 dkfjs

求高手指教
补充一问,比如a.txt内容:
/etc/  /test/fkjkchinafjsk/kejr  fchinadjfi /fjdsi/fjfichinajsfldjdk
我要问的是怎么把china这个词的前后几个字母取出来(包含china),取第一个的china就可以,后面的几个china不能取。比如我要取china的前后各两个字符,结果应该是:
jkchinafj

有人知道吗? 

还有个条件是第一个china的位置是不固定的,
awk "{printf("$s",substr($2,7,15)  这个虽然可以得到jkchinafj,但是不是我想要的,因为这个china的位置不一定就在第2个域,并且位置也不一定就是第7个到第15个字符

bollyone说的方法好像不满足哦,如果文件内容里包含两个以上的china,就 得不到正确的结果了,帮忙再想一下吧,还有你那个\1是什么意思呀? 

补充的问题,其实我是想实现这样一个功能:
a.txt内容如下:
test1 jdchinasf dkkkdj  chinadjfk
test2 jdfjschinadfjsldfjds kdfjkdfchina
test3 djfdkghchina  kgjdjgfchinadjf chinadjf
...

a.txt文件里有几行,每行都包含至少一个china,现在我想把每行第一个china和china前后各两个字符输出到b.txt
如下:
jdchinasf
jschinadf
ghchina  
。。。。

求高手帮忙
提问者采纳
2010-02-02 19:43
1:paste b.txt a.txt > new.txt
2:取china前后各两个字符:cat a.txt | sed 's/.*\(..china..\).*/\1/g' 

如果有多个china的话,cat a.txt | sed 's/.*\(..china..\).*/\1/;s/\(.......\)/\1/p' 或者后面再加个你写的管道awk "{printf("$s",substr($2,7,15) 

\1表示\( \)直接匹配到的内容,当然这不是最好的方法,你可以再想想其他的实现方式
提问者评价
很不错!
阅读(744) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~