#sed
#sed
Вопрос:
Я знаю, что существует много подобных вопросов, но я не мог понять этот конкретный шаблон и, следовательно, опубликовать здесь (потратив много времени и сдавшись). Пожалуйста, помогите 🙂
Есть строка, которую мне нужно сопоставить и заменить во всех файлах в данном каталоге.
Как это выглядит:
tag:
["https://example.com"]
Во что это должно быть преобразовано:
tag: "https://example.com"
Мне нужно сопоставить шаблоны: tag 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'
Ответ №1:
sed -e '/^tag: $/!b' -e '$b' -e 'N;s/n *["/"/;s/"]/"/' file
Совет: не используйте -i
до тех пор, пока правки не будут правильными.
Комментарии:
1. Это волшебство. Большое вам спасибо! Ваш ответ спас мой день, а также мое завтра, поскольку мне потребовалось бы гораздо больше времени, чтобы разобраться.
Ответ №2:
Это может сработать для вас (GNU sed):
sed -E '/^tag:s*$/{N;s/s*ns*[("[^]]*")]/ 1/;P;D}' file
Если строка начинается tag:
и сопровождается ["..."]
, удалите все пробелы и новую строку между двумя строками и замените на строку в кавычках, которая находится внутри второй строки.
Примечание. Если вторая строка не содержит ["..."]
первую строку, будет напечатана, и вторая строка будет принята в качестве первой строки.