linux - 如果最后一行(包含字符串的最后一次出现)是否以逗号作为最后一个字符,我该如何检查(并删除)?

标签 linux bash shell awk sed

我一直在网上寻找,但没有结果。

我正在尝试构建一个包生成器(在 shell/bash 中),并且相应的包包含(一个或多个)json 文件。浏览 json 文件时,如果用户想要删除其中一个步骤,我必须首先考虑如果他要删除的步骤是最后一步怎么办。如果是这样,最后一步的前一个将包含一个逗号,但 json 格式不允许这样做。

{
  "operation_machinetype": "Ford",
  "operation_steps": [
    "steps/Step_1/01_paint_the_car.json",
    "steps/Step_2/01_drive_the_car.json",
    "steps/Step_2/02_park_the_car.json"
  ]
}

例如,如果我删除“steps/Step2/02_park_the_car.json”,那么“steps/Step2/01_drive_the_car.json”将是最后一步,但逗号会导致错误。

提前谢谢大家。

最佳答案

$ cat tst.awk
index($0,tgt) {
    if (!/,[[:space:]]*$/) {
        sub(/,[[:space:]]*$/,"",prev)
    }
    next
}
NR>1 { print prev }
{ prev = $0 }
END { print prev }

$ awk -v tgt='"steps/Step_2/02_park_the_car.json"' -f tst.awk file
{
  "operation_machinetype": "Ford",
  "operation_steps": [
    "steps/Step_1/01_paint_the_car.json",
    "steps/Step_2/01_drive_the_car.json"
  ]
}

$ awk -v tgt='"steps/Step_2/01_drive_the_car.json"' -f tst.awk file
{
  "operation_machinetype": "Ford",
  "operation_steps": [
    "steps/Step_1/01_paint_the_car.json",
    "steps/Step_2/02_park_the_car.json"
  ]

关于linux - 如果最后一行(包含字符串的最后一次出现)是否以逗号作为最后一个字符,我该如何检查(并删除)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34881053/

相关文章:

git - 如何为 bash 脚本编写基于 Web 的 GUI?

linux - 执行csh脚本时如何显示行号?

linux - fatal error : Module sg not found

linux - 如何处理以连字符 (-) 字符开头的文件名?

c - 在 Windows 上运行用 Linux 编写的 C 程序

mysql - 使用 bash 从文件中插入和编辑 mysql 行

linux - 需要扁平化目录,修改文件名。用bash?

linux - 将文本文件重新格式化为一行字符串

linux - Bash:从文件中读取时,剪切不会剪切第一行

bash - Bash 中的临时输入重定向