Замените все поддомены в файле другим доменным именем, используя sed & amp; подстановочные

Ваша проблема в том, что cal уже выделяет текущий день, а управляющие коды отбрасывают смещения

Посмотрите на /tmp/terminal в шестнадцатеричном редакторе. Сегодня (11): 5F 08 31 5F 08 31, а не 31 31

Используйте cal -h для отключения автоматического выделения текущей даты.

1
задан 14 April 2018 в 19:51

6 ответов

Если вы используете .*.domain1.com в качестве своего шаблона, вы будете эссенциально соответствовать нежелательным символам, потому что . означает любой символ. Вы хотите заменить только «словарные символы» (буквы ASCII, цифры или знак подчеркивания), используя \w+.

Поскольку нормальное sed regex не знает о +, обязательно добавьте для sed использовать расширенное регулярное выражение.

Также убедитесь, что вы используете кавычки! В противном случае * может быть интерпретирован bash. И вам следует избегать . в шаблоне, иначе он также будет соответствовать любому символу.

sed -i.bak -r 's/\w+\.domain1\.com/domain2.com/g' file
4
ответ дан 22 May 2018 в 11:35

Если вы используете .*.domain1.com в качестве своего шаблона, вы будете эссенциально соответствовать нежелательным символам, потому что . означает любой символ. Вы хотите заменить только «словарные символы» (буквы ASCII, цифры или знак подчеркивания), используя \w+.

Поскольку нормальное sed regex не знает о +, обязательно добавьте -r для sed использовать расширенное регулярное выражение.

Также убедитесь, что вы используете кавычки! В противном случае * может быть интерпретирован bash. [D2] И вам следует избегать . в шаблоне, иначе он также будет соответствовать любому символу.

sed -i.bak -r 's/\w+\.domain1\.com/domain2.com/g' file
4
ответ дан 17 July 2018 в 17:24

Если вы используете .*.domain1.com в качестве своего шаблона, вы будете эссенциально соответствовать нежелательным символам, потому что . означает любой символ. Вы хотите заменить только «словарные символы» (буквы ASCII, цифры или знак подчеркивания), используя \w+.

Поскольку нормальное sed regex не знает о +, обязательно добавьте -r для sed использовать расширенное регулярное выражение.

Также убедитесь, что вы используете кавычки! В противном случае * может быть интерпретирован bash. [D2] И вам следует избегать . в шаблоне, иначе он также будет соответствовать любому символу.

sed -i.bak -r 's/\w+\.domain1\.com/domain2.com/g' file
4
ответ дан 23 July 2018 в 18:13

Используйте sed -i 's/domain1/domain2/' infile.

Если вы хотите заменить *.domain1.com, то измените:

sed 's/.*domain1/domain2/' infile

Убедитесь, что при первой попытке не использовать -i, который заменит место в вашем файле.

1
ответ дан 22 May 2018 в 11:35
  • 1
    Я хочу заменить * .domain1.com на домен2.com. – Rajesh Keladimath 6 April 2018 в 10:08

Используйте sed -i 's/domain1/domain2/' infile.

Если вы хотите заменить *.domain1.com, то измените:

sed 's/.*domain1/domain2/' infile

Убедитесь, что при первой попытке не использовать -i, который заменит место в вашем файле.

1
ответ дан 17 July 2018 в 17:24

Используйте sed -i 's/domain1/domain2/' infile.

Если вы хотите заменить *.domain1.com, то измените:

sed 's/.*domain1/domain2/' infile

Убедитесь, что при первой попытке не использовать -i, который заменит место в вашем файле.

1
ответ дан 23 July 2018 в 18:13
  • 1
    Я хочу заменить * .domain1.com на домен2.com. – Rajesh Keladimath 6 April 2018 в 10:08

Другие вопросы по тегам:

Похожие вопросы: