0

c1t1 を含む行の「FS」タイプを ufs から ext2 に変更し、それらの行のどこでも c1t1 を c1t2 に変更しようとしています。ファイルは次のようになります。

#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/c0t0d0s1   -   -   swap    -   no  -
/dev/dsk/c0t0d0s0   /dev/rdsk/c0t0d0s0  /   ufs 1   no  -
/dev/dsk/c0t0d0s6   /dev/rdsk/c0t0d0s6  /usr    ufs 1   no  -
/dev/dsk/c0t0d0s4   /dev/rdsk/c0t0d0s4  /var    ufs 1   no  -
/dev/dsk/c0t0d0s5   /dev/rdsk/c0t0d0s5  /local  ufs 2   yes -
/dev/dsk/c0t0d0s3   /dev/rdsk/c0t0d0s3  /usr/openwin    ufs 2   yes -

/dev/dsk/c1t0d0s0   /dev/rdsk/c1t0d0s0  /opt    ufs 3   yes -
/dev/dsk/c1t0d0s3   /dev/rdsk/c1t0d0s3  /export/user1   ufs 3   yes nosuid
/dev/dsk/c1t1d0s0   /dev/rdsk/c1t1d0s0  /usr/local  ufs 3   yes -

/dev/dsk/c1t1d0s3   /dev/rdsk/c1t1d0s3  /export/user3   ufs 3   yes nosuid  
/dev/dsk/c2t0d0s0   /dev/rdsk/c2t0d0s0  /export/home    ufs 4   yes nosuid  
/dev/dsk/c2t0d0s3   /dev/rdsk/c2t0d0s3  /casa6  ufs 4   yes -
/dev/dsk/c2t3d0s0   /dev/rdsk/c2t3d0s0  /export/user2   ufs 5   yes nosuid  
/dev/dsk/c2t3d0s3   /dev/rdsk/c2t3d0s3  /stage  ufs 5   yes -

# ringer.cs.utsa.edu:/usr/local/news    -   /usr/local/news nfs -   yes retry=10    
ringer.cs.utsa.edu:/var/mail    -   /var/mail   nfs -   yes retry=10,actimeo=0  
#ringer.cs.utsa.edu:/var/spool/news -   /var/spool/news nfs -   yes retry=10
#ringer.cs.utsa.edu:/answerbook -   /answerbook nfs -   yes retry=10

swap    -   /tmp    tmpfs   -   yes -

これが私が理解できたすべてです:

s/(^\/dev\/dsk\/c1t1.*)ufs(.*$)/$1ext2$2/
4

2 に答える 2

3

構文が少し混乱している場合は、次のように使用することがありますawk

awk '$1~/c1t1/ {$4="ext2"; sub("c1t1","c1t2",$0)}1' file

説明

  • $1~/c1t1/最初のフィールドに が含まれているかどうかを確認しますc1t1。その場合、 を実行し{}ます。
  • $4="ext2"4 番目のフィールドを「ext2」に設定します。
  • sub("c1t1","c1t2",$0)c1t1すべてを行全体で置き換えますc1t2( $0)。
  • 1すべての行を印刷します。

それを実行して、別のファイルにリダイレクトできます: awk ... file > new_file.

テスト

$ awk '$1~/c1t1/ {$4="ext2"; sub("c1t1","c1t2",$0)}1' file

#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/c0t0d0s1   -   -   swap    -   no  -
/dev/dsk/c0t0d0s0   /dev/rdsk/c0t0d0s0  /   ufs 1   no  -
/dev/dsk/c0t0d0s6   /dev/rdsk/c0t0d0s6  /usr    ufs 1   no  -
/dev/dsk/c0t0d0s4   /dev/rdsk/c0t0d0s4  /var    ufs 1   no  -
/dev/dsk/c0t0d0s5   /dev/rdsk/c0t0d0s5  /local  ufs 2   yes -
/dev/dsk/c0t0d0s3   /dev/rdsk/c0t0d0s3  /usr/openwin    ufs 2   yes -

/dev/dsk/c1t0d0s0   /dev/rdsk/c1t0d0s0  /opt    ufs 3   yes -
/dev/dsk/c1t0d0s3   /dev/rdsk/c1t0d0s3  /export/user1   ufs 3   yes nosuid
/dev/dsk/c1t2d0s0 /dev/rdsk/c1t1d0s0 /usr/local ext2 3 yes -

/dev/dsk/c1t2d0s3 /dev/rdsk/c1t1d0s3 /export/user3 ext2 3 yes nosuid
/dev/dsk/c2t0d0s0   /dev/rdsk/c2t0d0s0  /export/home    ufs 4   yes nosuid  
/dev/dsk/c2t0d0s3   /dev/rdsk/c2t0d0s3  /casa6  ufs 4   yes -
/dev/dsk/c2t3d0s0   /dev/rdsk/c2t3d0s0  /export/user2   ufs 5   yes nosuid  
/dev/dsk/c2t3d0s3   /dev/rdsk/c2t3d0s3  /stage  ufs 5   yes -

# ringer.cs.utsa.edu:/usr/local/news    -   /usr/local/news nfs -   yes retry=10    
ringer.cs.utsa.edu:/var/mail    -   /var/mail   nfs -   yes retry=10,actimeo=0  
#ringer.cs.utsa.edu:/var/spool/news -   /var/spool/news nfs -   yes retry=10
#ringer.cs.utsa.edu:/answerbook -   /answerbook nfs -   yes retry=10

swap    -   /tmp    tmpfs   -   yes -
于 2013-10-12T19:59:25.190 に答える
1

あなたの検索は、キャプチャと置換の恩恵を受けるかもしれません:

sed -e 's/^\(.*dsk\/\)c1t1\(.*\)ufs\(.*\)$/\1c1t2\2ext2\3/g' some_file

それほど読みやすくなく、他の方法もありますが、\( \)何かをキャプチャします。上記の例では、3 つのものをキャプチャしました。それらをダンプしたい場合は、次の方法で (キャプチャの順序で) 参照します。

\1 \2 \3
于 2013-10-12T19:59:32.583 に答える