Как делают я добираюсь от этого:
randomcollege-nt\user90
к этому:
user90
использование sed
?
Я использовал бы простое grep
для поиска user90
:
$ echo "randomcollege-nt\user90" | grep -o user90
user90
, Если user90 не является постоянным, предпочтите эту команду:
$ echo "randomcollege-nt\user90" | grep -oP '(?<=randomcollege-nt\\)\w+'
user90
Наконец использование sed
для редактирования файла на месте:
$ sed -ri 's/randomcollege-nt\\(user[0-9]+)/\1/' my_file
Или соответствовать всем возможным учетным записям пользователей:
$ sed -ri 's/randomcollege-nt\\(\w+)/\1/' my_file
Вы анализируете некоторый текст для извлечения имени пользователя из domain\username
строка, скорее всего, из Windows. Большинство вышеупомянутых ответов только обращается к Вашей определенной строке в качестве примера.
лучший способ сделать это использует regex в 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" | cut -d'\' -f2
Другой sed
:
$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//'
user90
или POSIXly:
$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90
Действительно ли это - вопрос?
$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90
, если ужаление randomcollege-nt не является постоянным использованием команда awk выше/ниже.
Скорее Вы используете 'awk' для фильтрации "user90":
echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
Эта простая команда grep сделает задание,
$ echo 'randomcollege-nt\user90' | grep -oP '[^\\]*
user90
С sed
удаляют все в строке перед определенным символом (определите в двойную скобку [Определенный символ]).
echo "randomcollege-nt\user90" | sed 's/.*[\]//'
Средства заменяют все символы (.*[\]
) перед \
символ с пробельным символом (//
)
, Если Вы имеете файл и хотите к оперативному использованию замены -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-операцией-в-секунду:
sudo sed -ri 's/#\s(server_tokens off;)/\1/' /etc/nginx/nginx.conf
.
Протестированный и работающий на nginx/1.12.1 на Ubuntu 16.04 LTS. Связанный ответ на блокировку вниз NGINX путем выключения маркеров сервера здесь.