Замените одну квадратную скобку и новую строку во всех файлах с помощью сценария оболочки

#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: и сопровождается ["..."] , удалите все пробелы и новую строку между двумя строками и замените на строку в кавычках, которая находится внутри второй строки.

Примечание. Если вторая строка не содержит ["..."] первую строку, будет напечатана, и вторая строка будет принята в качестве первой строки.