Использование SED с подстановочными знаками
Проблема с заменой строки с использованием подстановочных знаков в sed
Я пытаюсь заменить строку с использованием подстановочного знака, но это не работает так, как я ожидал.
Моя строка выглядит следующим образом: "some-string-8"
Я написал следующую команду:
sed -i 's/string-*/string-0/g' file.txt
Однако вывод оказывается таким:
some-string-08
Как мне правильно заменить строку, чтобы результатом была "some-string-0"?
2 ответ(ов)
Знак звёздочки (*) означает "ноль или более предыдущего элемента".
Если вы хотите сопоставить любой одиночный символ, используйте следующую команду:
sed -i 's/string-./string-0/g' file.txt
Если вам нужно сопоставить любую строку (то есть любой отдельный символ ноль или более раз), используйте:
sed -i 's/string-.*/string-0/g' file.txt
Концепция "подстановочного знака" (wildcard) в регулярных выражениях работает немного иначе. Чтобы сопоставить "любой символ", вы можете использовать точку ".". Модификатор "*" означает "сопоставить любое количество раз".
Bash инструмент для получения n-й строки из файла
Как выполнить рекурсивный поиск/замену строки с помощью awk или sed?
Как сопоставить любой символ на нескольких строках в регулярном выражении?
Как добавить строку текста в середину файла с помощью bash?
Существует ли аналог 'git sed'?