Я новичок в sed, и я потерял эту проблему. Существует одна строка в текстовом файле:sed не соответствует знаку равенства или распознает специальные символы после второй косой черты
start_year = 1952,
Мне нужно заменить начальный год число с годом число в массиве, скажем time_c = (1999 01 01)
. Таким образом, я проверил следующую команду:
txt=" start_year = 1952,"
echo "$txt" | sed -r 's/([:blank:]*start_year[:blank:]*=) (.*)/\1 [:blank:]${time_c[0]}/g'
Но это только возвращает исходную строку раздели белых пространств:
start_year = 1952,
Кажется, что СЭД признает только образец, если удалить знак равенства, потому что если я
echo "$txt" | sed -r 's/([:blank:]*start_year[:blank:]*) (.*)/\1 = [:blank:]${time_c[0]}/g'
Тогда результат:
start_year = [:blank:]${time_c[0]}
Теперь sed, похоже, правильно распознал. Но почему, почему это не интерпретирует [: blank:] и мою переменную?
Еще одна минута заключается в том, что я хотел бы сохранить исходные пробелы в замененном тексте, если это возможно. Это не имеет значения для моей программы, но это делает замененную линию более приятной с другими.
Может кто-нибудь помочь? Большое спасибо!
Добро пожаловать на Stack Overflow. Обратите внимание, что предпочтительный способ сказать «спасибо» здесь ответы на вопросы и полезные ответы (если у вас достаточно репутации, чтобы сделать это), и, приняв наиболее полезный ответ на любой заданный вами вопрос (что также дает вам небольшой импульс для вашей репутации ). См. Страницу [About], а также [Как задать вопросы здесь?] (Http://stackoverflow.com/help/how-to-ask) и [Что мне делать, когда кто-то отвечает на мой вопрос ? ?] (http://stackoverflow.com/help/someone-answers) –