我尝试从文件中更改一行中的两个不同模式。
该文件是/ etc / fstab,如:
/dev/sda1 / ext4 auto,acl,errors=remount-ro 0 1
/dev/sda2 /home ext4 auto,acl,errors=remount-ro 0 2
结果必须是:
/dev/sda1 / ext4 auto,acl,errors=remount-ro 0 1
/dev/mapper/home /home ext4 auto,acl,errors=remount-ro 0 0
我在第一个模式上做了什么:
sed -i "s/sda2/mapper\/home/" /etc/fstab
我试过的第二种模式:
sed -i "s/sda2/mapper\/home/;s/[0-9]$/0/" /etc/fstab
但它会更新所有行:
/dev/sda1 / ext4 auto,acl,errors=remount-ro 0 0
/dev/mapper/home /home ext4 auto,acl,errors=remount-ro 0 0
任何人都可以帮助我吗? 非常感谢!
答案 0 :(得分:3)
您可以使用语法address function-list
将一组命令应用于与模式匹配的行:
sed -i "/sda2/{ s/sda2/mapper\/home/
s/[0-9]$/0/ }" /etc/fstab
答案 1 :(得分:1)
您可以使用awk
:
awk '$1 ~ /sda2/{sub(/sda2/, "mapper/home", $1); $NF=0} 1' file | column -t
/dev/sda1 / ext4 auto,acl,errors=remount-ro 0 1
/dev/mapper/home /home ext4 auto,acl,errors=remount-ro 0 0
使用column -t
仅用于格式化。