使用Shell脚本替换所有文件中的一个方括号和新行



我知道存在许多类似的问题,但我无法理解这种特定的模式,因此在这里发帖(在花了很多时间并放弃之后(。请帮助:(

有一个字符串,我需要在给定目录中的所有文件中进行匹配和替换。

外观:

tag: 
["https://example.com"]

应该转换为什么:

tag: "https://example.com"

我需要匹配模式:标记\n["]并从所有文件中替换它们。

这是我尝试过的,但没有奏效:

find . -type f -name "*.md" -print0 | xargs -0 sed -i '' -e 's/tag: \n  ["/tag: /g'
find . -type f -name "*.md" -print0 | xargs -0 sed -i '' -e 's/"]/"/g'
sed -e '/^tag: $/!b' -e '$b' -e 'N;s/n *["/"/;s/"]/"/' file

提示:在编辑正确之前,不要使用-i

这可能对你有用(GNU sed(:

sed -E '/^tag:s*$/{N;s/s*ns*[("[^]]*")]/ 1/;P;D}' file

如果一行以tag:开头,后面跟着["..."],则删除两个字符串之间的任何空格和换行符,并替换为第二个字符串中的带引号字符串。

注意:如果第二行不包含["..."],则将打印第一行,并接受第二行作为第一行。