gpt4 book ai didi

linux - 在制表符后插入文本

转载 作者:太空宇宙 更新时间:2023-11-04 12:12:24 25 4
gpt4 key购买 nike

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

最佳答案

解析文本的方法有很多。

假设此命令产生以下输出:

$ 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,它会遍历每个字段并使用前面的选项卡打印它。

有很多方法可以做任何事情。选择你认为一年后对你最有意义的一个。尝试使用与预期不完全匹配的数据进行的任何操作。能够预测错误很重要。

关于linux - 在制表符后插入文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48490874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com