我正在尝试创建一个小脚本,我想在下面写几行文件。我尝试将这些命令的输出写入fstab文件,以自动化程序集...问题是,在写完磁盘的UUID输出后,我想用一个制表机写回声之后的数据在每个空间,但我不能以任何方式把它们......谢谢
blkid |grep "/dev/sdb"|cut -d " " -f2 |sed 's/"//g'|echo "/mnt/discon1 ext4 defaults 0 2">>fstab.bak
命令的输出将其发送到fstab文件并以下列方式将其传递给我
UUID=377055f4-4f83-4326-8b43-a65694de84da
/mnt/discon1 ext4 defaults 0 2
我需要在UUID之后插入制表符并添加文本的其余部分
答案 0 :(得分:0)
将命令分成2行:将blkid的输出捕获到变量中,然后将该变量与其他文本一起回显,例如。
blkid=`blkid | grep "/dev/sdb" | cut -d " " -f2 | sed 's/"//g'`
echo "$blkid /mnt/discon1 ext4 defaults 0 2" >> fstab.bak
答案 1 :(得分:0)
您可以使用sed
进行很多操作。剩下时间的时候,看看下面的命令:
/sbin/blkid | sed -n '/dev.sda3/ s#UUID="\([^"]*\)#\1\t/mnt/discon1\text4\tdefaults\t0\t2#p'
答案 2 :(得分:0)
解析文本的方法很多。
假设此命令产生以下输出:
$ blkid
UUID=377055f4-4f83-4326-8b43-a65694de84da
/mnt/discon1 ext4 defaults 0 2
我们可以使用awk:
$ blkid | awk -F= '$1=="UUID"{u=$2;next} {print u,$0}' OFS="\t"
377055f4-4f83-4326-8b43-a65694de84da /mnt/discon1 ext4 defaults 0 2
这将=
设置为字段分隔符以捕获UUID,但对于没有UUID的行,它将打印最后捕获的UUID以及当前行。
或sed:
$ blkid | sed -ne $'/UUID=/{s///;h;};H;x;s/\\n/\t/;$p'
377055f4-4f83-4326-8b43-a65694de84da /mnt/discon1 ext4 defaults 0 2
这将搜索UUID行,从中剥离左侧并将其存储在sed的“保持缓冲区”中。然后对于其他行,它只是将当前行附加到保持缓冲区,将其交换回模式缓冲区并用制表符替换换行符。然后在文件的末尾打印。
请注意,上面的选项使用标签作为第一个分隔符,但逐字复制剩余的行。
也许你只想要bash中的东西:
$ while IFS== read -r a b; do if [[ $a = UUID ]]; then printf '%s' "$b"; else c=($a); printf '\t%s' "${c[@]}"; fi; done < <(blkid); echo
377055f4-4f83-4326-8b43-a65694de84da /mnt/discon1 ext4 defaults 0 2
与awk脚本一样,它使用=
字符作为字段分隔符来捕获UUID。当它找到UUID时,它会打印出来。如果找不到UUID,它将遍历每个字段并使用前一个选项卡打印它。
许多方法可以做任何事情。从现在开始选择你认为对你最有意义的一个。尝试使用与您的预期不相符的数据进行任何操作。能够预测错误非常重要。