如何在终端输出中的特定术语之后查找并替换某些内容

如何在终端输出中的特定术语之后查找并替换某些内容

我需要在特定的已知分区名称之后运行blkid并复制特定的分区名称。UUID

然后,我需要将其粘贴到现有的配置文件中,替换UUID它已经存在的配置文件 ( parent_device_uuid)。下面的示例配置。

任何人都可以用初学者能理解的方式演示如何做到这一点吗?

{
  "backup_device_uuid" : "cdb09919-39d4-4a17-9fc4-6daa1d38f1e1",
  "parent_device_uuid" : "IOe7Qc-fjAK-2ydl-OMk4-SvVu-1P6Y-PJSHzV",
  "do_first_run" : "false",
  "btrfs_mode" : "false",
  "include_btrfs_home_for_backup" : "false",
  "include_btrfs_home_for_restore" : "false",
  "stop_cron_emails" : "true",
  "btrfs_use_qgroup" : "true",
  "schedule_monthly" : "true",
  "schedule_weekly" : "true",
  "schedule_daily" : "true",
  "schedule_hourly" : "true",
  "schedule_boot" : "true",
  "count_monthly" : "1",
  "count_weekly" : "2",
  "count_daily" : "3",
  "count_hourly" : "3",
  "count_boot" : "1",
  "snapshot_size" : "15837901165",
  "snapshot_count" : "292512",
  "date_format" : "%Y-%m-%d %H:%M:%S",
  "exclude" : [
    "/home/test/**",
    "/home/test2/**",
    "/root/**"
  ],
  "exclude-apps" : []
}

答案1

鉴于您正在使用json文件,您可以使用该命令jq

为了得到仅有的对于UUID某些分区,您可以使用以下命令:

将 blkid 与标签名称一起使用

blkid -s UUID -o value -t 'LABEL=your_label_name'

#If you got: 'command not found' then you can use:
sudo blkid -s UUID -o value -t 'LABEL=your_label_name'
#or
/sbin/blkid -s UUID -o value -t 'LABEL=your_label_name'

your_label_name您想要的设备的名称在哪里。

blkid --help

  1. -s显示指定的标签(在本例中为 UUID)
  2. -o是输出格式(在本例中我们需要 UUID 标记的值)

使用 lsblk (这不使用标签名称)

lsblk /dev/nvme0n1p1 -o UUID -n

lsblk --help

  1. -o输出列(在本例中我们只需要 UUID 列)
  2. -n不打印标题

解决方案

最后,jq您可以parent_device_uuid使用上面的命令之一替换为您获得的 UUID:

jq --arg puuid "$(blkid -s UUID -o value -t 'LABEL=your_label_name')"  '.parent_device_uuid = $puuid' < configfile > tmpconfig
mv tmpconfig configfile

或者,如果您在使用时没有权限mv(用于移动、重命名文件),则使用:

sudo mv tmpconfig configfile

关于配置文件,这是包含以下内容的文件:

{
  "backup_device_uuid" : "cdb09919-39d4-4a17-9fc4-6daa1d38f1e1",
  "parent_device_uuid" : "IOe7Qc-fjAK-2ydl-OMk4-SvVu-1P6Y-PJSHzV",
  "do_first_run" : "false",
  "btrfs_mode" : "false",
  "include_btrfs_home_for_backup" : "false",
  "include_btrfs_home_for_restore" : "false",
  "stop_cron_emails" : "true",
  "btrfs_use_qgroup" : "true",
  "schedule_monthly" : "true",
  "schedule_weekly" : "true",
  "schedule_daily" : "true",
  "schedule_hourly" : "true",
  "schedule_boot" : "true",
  "count_monthly" : "1",
  "count_weekly" : "2",
  "count_daily" : "3",
  "count_hourly" : "3",
  "count_boot" : "1",
  "snapshot_size" : "15837901165",
  "snapshot_count" : "292512",
  "date_format" : "%Y-%m-%d %H:%M:%S",
  "exclude" : [
    "/home/test/**",
    "/home/test2/**",
    "/root/**"
  ],
  "exclude-apps" : []
}

关于jq参数:--arg puuid "$(blkid -s UUID -o value -t 'LABEL=your_label_name')"用于将UUID设备的 分配给变量puuid。并'.parent_device_uuid = $puuid'更改"parent_device_uuid" : "IOe7Qc-fjAK-2ydl-OMk4-SvVu-1P6Y-PJSHzV" to whatpuuid`(这是设备的 UUID)

相关内容