在标签后插入文字

时间:2018-01-28 20:19:01

标签: linux bash shell unix scripting

我正在尝试创建一个小脚本,我想在下面写几行文件。我尝试将这些命令的输出写入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之后插入制表符并添加文本的其余部分

3 个答案:

答案 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,它将遍历每个字段并使用前一个选项卡打印它。

许多方法可以做任何事情。从现在开始选择你认为对你最有意义的一个。尝试使用与您的预期不相符的数据进行任何操作。能够预测错误非常重要。