如何循环遍历json并用grep&替换值sed在多个文件中

时间:2018-04-12 09:22:29

标签: sed terminal grep

我有一个名为reference.json的引用json文件,其中包含我要在.html文件中替换的键/值。

{
    "a.js": "first.1a.js",
    "b.js": "second.2b.js",
    "c.js": "third.3b.js"
}

然后我得到了3个不同的html文件

test1.html

<!DOCTYPE html>
<html lang="en">
<head>
  ..
<body>
  <div class="container">

    <h1>file 1</h1>

  </div>

  <script src="a.js"></script>
  <script src="b.js"></script>
  <script src="c.js"></script>
</body>
</html>

test2.html

<!DOCTYPE html>
<html lang="en">
<head>
  ...
</head>
<body>
  <div class="container">

    <h1>file 2</h1>

  </div>

  <script src="a.js"></script>
  <script src="b.js"></script>
  <script src="c.js"></script>
</body>
</html>

文件夹folder1/test3.html

中的文件
<!DOCTYPE html>
<html lang="en">
<head>
  ...
<body>
  <div class="container">

    <h1>file 3</h1>

  </div>

  <script src="../js/a.js"></script>
  <script src="../js/b.js"></script>
  <script src="../js/c.js"></script>
</body>
</html>

如何搜索我的所有.html文件,并使用grep和sed替换我的json中的值?

1 个答案:

答案 0 :(得分:0)

假设您的reference.json格式正确,这个单行将为您完成:

$ CMD=" sed -i $( cat reference.json | grep ":" | sed 's/ //g;s/,//g;s/"//g' | sed 's/:/\//g' | awk '{printf("s/%s/g;",$0)}' )" && find . -name "*.html" -exec ${CMD} {} \;

说明:

使用reference.json形成sed替换表达式以在sed命令中使用它。使用find命令查找所有“* .html”文件并执行替换。

如果未格式化reference.json,则可以使用以下命令对其进行格式化:

$ python -m json.tool reference.json