Удалите все перед первым вхождением указанного слова

Как я могу удалить все перед первым вхождением указанного использования слова sed?

Что я попробовал до сих пор:

echo $(cat /etc/nginx/sites-enabled/default | sed 's/^*.server/server/') > /etc/nginx/sites-enabled/default

Мне нужен к очистке весь мусор, прежде чем я найду первое слово "сервера".

Главным образом мне был бы нужен a sed regex...

У меня есть файл значения по умолчанию Nginx с проксированием информации, которая получает некоторые ведущие пробелы, в то время как сценарий копирует его в контейнер Докера и поэтому его наклон быть запущенным. Я должен был бы удалить его с некоторой командой.

Файл:

       server
{
listen 80 default_server;
location / 
{
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:5000;
}
}

Я не уверен, какие символы там, таким образом, я хотел бы удалить все перед 'сервером'.

3
задан 18 February 2016 в 13:49

2 ответа

Вы просто удаляете каждый пробельный символ (вкладки, пробелы, безотносительно) между началом строки и словом "сервер" (только если нет ничего иного кроме пробелов), использование следующей простой команды:

sed -i 's/^\s*server/server/' FILENAME

-i опция изменяет оперативный файл, который означает, что все изменения применяются и сразу сохраняются, и Вы не получаете вывода. Если Вы не захотите переписывать файл и видеть измененную новую версию вместо этого, опускать -i, то опция и команда распечатают его к STDOUT (поток стандартного вывода).

я использую regex ^\s*server, чтобы соответствовать любому количеству любого вида пробелов между началом строки и словом "сервер" включительно, и позволить ему заменить те соответствия словом сам "сервер".

2
ответ дан 1 December 2019 в 16:25

GNU sed имеет специальную форму обращения диапазона 0,/pattern/, который позволяет Вам соответствовать только первому вхождению pattern в Вашем файле, например,

sed '0,/server/ s/^.*server/server/' /etc/nginx/sites-enabled/default

или (возможно, лучше, так как это привязывает соответствие к запуску строки также)

sed '0,/^.*server/ s//server/' /etc/nginx/sites-enabled/default


Попытка это сначала, прежде чем Вы будете добавлять -i (оперативный) флаг и/или будете использовать резервное копирование -i.bak

1
ответ дан 1 December 2019 в 16:25

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

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