我知道存在许多类似的问题,但我无法理解这种特定的模式,因此在这里发帖(在花了很多时间并放弃之后(。请帮助:(
有一个字符串,我需要在给定目录中的所有文件中进行匹配和替换。
外观:
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:
开头,后面跟着["..."]
,则删除两个字符串之间的任何空格和换行符,并替换为第二个字符串中的带引号字符串。
注意:如果第二行不包含["..."]
,则将打印第一行,并接受第二行作为第一行。