Как я могу получить от этого:
randomcollege-nt\user90
к этому:
user90
используя sed
?
sed
посещение: grymoire.com/Unix/Sed.html
Как я могу получить от этого:
randomcollege-nt\user90
к этому:
user90
используя sed
?
sed
посещение: grymoire.com/Unix/Sed.html
Ответы:
Я бы использовал простой, 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
grep -F
всю строку.
Вы анализируете некоторый текст, чтобы извлечь имя пользователя из 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
или положительно:
$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90
sh
особенность POSIX . pubs.opengroup.org/onlinepubs/009604599/utilities/…
Я знаю, что вы хотите использовать sed, но я бы использовал что-то другое ...
echo "randomcollege-nt\user90" | cut -d'\' -f2
Это вопрос?
$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90
если жало randomcollege-nt не является постоянным, используйте команду awk выше / ниже.
/user90
неuser90
Скорее вы используете '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/.*[\]//'
Означает замену всех .*[\]
символов ( ) перед \
символом символом пробела ( //
)
Если у вас есть файл, и вы хотите заменить его, используйте -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 путем отключения токенов сервера здесь .
man the_command_name
и вы получите полезное руководство по ее использованию. Вы также можете зайти на сайт www.google.com и ввести "учебник по имени_команды", и вы найдете множество пошаговых руководств.