2017-06-10 35 views
0

我想要做的多内容替换一行在下列文件中的Linux ed编辑:Linux的ed编辑多个搜索/替换一行

#device  device  mount  FS fsck mount mount 
#to mount to fsck  point  type pass at boot options 
# 
#/dev/dsk/c0d0s2 /dev/rdsk/c0d0s2 /usr  ufs 1 yes - 
fd - /dev/fd fd - no - 
/proc - /proc proc - no - 
/dev/dsk/c0d0s3 - - swap - no - 
/dev/dsk/c0d0s0 /dev/rdsk/c0d0s0 / ufs 1 no - 
/dev/dsk/c0d0s4 /dev/rdsk/c0d0s4 /usr ufs 1 no - 
/dev/dsk/c0d0s1 /dev/rdsk/c0d0s1 /var ufs 1 yes - 
/dev/dsk/c0d0s7 /dev/rdsk/c0d0s7 /export ufs 2 yes - 
/dev/dsk/c0d0s5 /dev/rdsk/c0d0s5 /usr/informix ufs 2 yes - 
swap - /tmp tmpfs - yes - 

我想交换的所有“C0”的/ dev“C1”/ ....

这里是我的正则表达式,我投入ED:1,\$s/\(\/dev.*\)\(c0\)\(d0s.*\)/\1c1\3/g导致

#device  device  mount  FS fsck mount mount 
    #to mount to fsck  point  type pass at boot options 
    # 
    #/dev/dsk/c0d0s2 /dev/rdsk/c1d0s2 /usr  ufs 1 yes - 
    fd - /dev/fd fd - no - 
    /proc - /proc proc - no - 
    /dev/dsk/c1d0s3 - - swap - no - 
    /dev/dsk/c0d0s0 /dev/rdsk/c1d0s0 / ufs 1 no - 
    /dev/dsk/c0d0s4 /dev/rdsk/c1d0s4 /usr ufs 1 no - 
    /dev/dsk/c0d0s1 /dev/rdsk/c1d0s1 /var ufs 1 yes - 
    /dev/dsk/c0d0s7 /dev/rdsk/c1d0s7 /export ufs 2 yes - 
    /dev/dsk/c0d0s5 /dev/rdsk/c1d0s5 /usr/informix ufs 2 yes - 
    swap - /tmp tmpfs - yes - 

然而,这漫长的正则表达式:
1,\$s/\(\/dev.*\)\(c0\)\(d0s.*\)\(\/dev.*\)\(c0\)\(d0s.*\)/\1c1\3\4c1\6/g结果在此:

#device  device  mount  FS fsck mount mount 
#to mount to fsck  point  type pass at boot options 
# 
#/dev/dsk/c1d0s2 /dev/rdsk/c1d0s2 /usr  ufs 1 yes - 
fd - /dev/fd fd - no - 
/proc - /proc proc - no - 
/dev/dsk/c0d0s3 - - swap - no - 
/dev/dsk/c1d0s0 /dev/rdsk/c1d0s0 / ufs 1 no - 
/dev/dsk/c1d0s4 /dev/rdsk/c1d0s4 /usr ufs 1 no - 
/dev/dsk/c1d0s1 /dev/rdsk/c1d0s1 /var ufs 1 yes - 
/dev/dsk/c1d0s7 /dev/rdsk/c1d0s7 /export ufs 2 yes - 
/dev/dsk/c1d0s5 /dev/rdsk/c1d0s5 /usr/informix ufs 2 yes - 
swap - /tmp tmpfs - yes - 

离开第一 “C0”仍然为 “C0”,因为它不是由搜索字符串发现


所以我得到了一个文件,我在一行中获得了多个搜索结果,但它只替换了一个实例。我知道“全局”标志在文件的第一步中运行,并标记匹配的。我希望我知道是什么原因引发了这个问题,但是我没有足够的经验知道如何解决这个问题。
干杯您的帮助

+0

请提供包含数据,结果和预期结果的[示例](https://stackoverflow.com/help/mcve)。 – ArturFH

回答

0

可以使用g命令来搜索与dev串线则更换全球使用s(替补)命令和g(全局)标志:

​​

给你预期结果如下:

#device  device  mount  FS fsck mount mount 
#to mount to fsck  point  type pass at boot options 
# 
#/dev/dsk/c1d0s2 /dev/rdsk/c1d0s2 /usr  ufs 1 yes - 
fd - /dev/fd fd - no - 
/proc - /proc proc - no - 
/dev/dsk/c1d0s3 - - swap - no - 
/dev/dsk/c1d0s0 /dev/rdsk/c1d0s0 / ufs 1 no - 
/dev/dsk/c1d0s4 /dev/rdsk/c1d0s4 /usr ufs 1 no - 
/dev/dsk/c1d0s1 /dev/rdsk/c1d0s1 /var ufs 1 yes - 
/dev/dsk/c1d0s7 /dev/rdsk/c1d0s7 /export ufs 2 yes - 
/dev/dsk/c1d0s5 /dev/rdsk/c1d0s5 /usr/informix ufs 2 yes - 
swap - /tmp tmpfs - yes -