Как мне получить:
randomcollege-nt\user90
к этому:
user90
с помощью sed?
Вы разбираете текст, чтобы извлечь имя пользователя из строки domain\username, скорее всего из Windows. Большинство из вышеперечисленных ответов относятся только к вашей конкретной строке примера.
Лучший способ сделать это - использовать регулярное выражение в sed, чтобы извлечь все, что приходит после \. Вот как вы это сделаете:
sed 's|.*\\\(.*\)|\1|'
Это будет соответствовать всем (.*) до обратной косой черты (здесь мы убегаем, так что это \\), а затем сопоставляем все после обратная косая черта (.*), но делая ее группой захвата (т. е. обертывать вокруг нее скобки, но мы также должны избегать их, поэтому \(.*\)). Теперь, когда у нас есть все, что приходит после \ в строке в качестве группы захвата, мы печатаем ее, ссылаясь на нее с помощью \1.
Вы можете использовать указанную выше команду sed с любым доменным именем , не обязательно randomcollege-nt.
$ echo "randomcollege-nt\user90" | sed 's|.*\\\(.*\)|\1|'
user90
$ echo "domain\username" | sed 's|.*\\\(.*\)|\1|'
username
$ echo "anydomainname\roboman1723" | sed 's|.*\\\(.*\)|\1|'
roboman1723
Другой sed:
$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//'
user90
или POSIXly:
$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90
Я знаю, что вы хотите использовать sed, но я бы использовал что-то другое ...
echo "randomcollege-nt\user90" | cut -d'\' -f2
Это вопрос?
$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90
, если строка random college-nt не постоянна, используйте команду awk выше / ниже.
Скорее вы используете «awk» для фильтрации «user90»:
echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
Эта простая команда grep выполнит задание,
$ echo 'randomcollege-nt\user90' | grep -oP '[^\\]*$'
user90
С sed удалять все в строке перед конкретным символом (определять в двойную скобку [Specific char]).
echo "randomcollege-nt\user90" | sed 's/.*[\]//'
Средство заменяет все символы [.*[\]) до \ ] char с символом пробела (//)
Если у вас есть файл и вы хотите заменить замену, используйте флаг -i в команде sed следующим образом:
sed -i 's/.*[\]//' /path/to/FileName
Оригинальный вопрос, заданный для sed, но я вижу, что альтернативы популярны здесь.
Если вы используете Bash, расширение параметра на сегодняшний день является самым простым:
ORIGIN='randomcollege-nt\user90'
echo "${ORIGIN#*\\}"
Если вы потенциально ожидаете более одной обратной косой черты, удвойте символы хэша:
echo "${ORIGIN##*\\}"
Для получения дополнительной информации, man bash и поиска Parameter Expansion.
В случае, если кто-то пытается автоматически удалить пропущенный # server_tokens off; из nginx, чтобы помочь с автоматическим dev-ops:
sudo sed -ri 's/#\s(server_tokens off;)/\1/' /etc/nginx/nginx.conf.
Протестировано и работает для nginx /1.12.1 на Ubuntu 16.04 LTS. Связанный ответ на блокировку NGINX, отключив здесь токены сервера.