2017-06-10 38 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 -