Удалите первую часть строки, используя sed

Как мне получить:

randomcollege-nt\user90

к этому:

user90

с помощью sed?

1
задан 5 September 2014 в 18:39

9 ответов

Вы разбираете текст, чтобы извлечь имя пользователя из строки 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
18
ответ дан 24 May 2018 в 04:00

Другой sed:

$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//'
user90

или POSIXly:

$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90
10
ответ дан 24 May 2018 в 04:00
  • 1
    Это не багизм, это функция POSIX sh. pubs.opengroup.org/onlinepubs/009604599/utilities/&hellip – nyuszika7h 5 September 2014 в 18:40
  • 2
    +1. не видел вашего ответа, я удалю свой комментарий о OP ^ ^ – Olivier Dulac 6 September 2014 в 00:38

Я знаю, что вы хотите использовать sed, но я бы использовал что-то другое ...

echo "randomcollege-nt\user90" | cut -d'\' -f2
7
ответ дан 24 May 2018 в 04:00
  • 1
    Знать , как использовать инструмент так же важно, как знать , какой инструмент использовать. – Rafał Cieślak 4 September 2014 в 21:10

Это вопрос?

$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90

, если строка random college-nt не постоянна, используйте команду awk выше / ниже.

5
ответ дан 24 May 2018 в 04:00

Скорее вы используете «awk» для фильтрации «user90»:

echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
3
ответ дан 24 May 2018 в 04:00
  • 1
    Являются ли они способом awk для редактирования файла на месте и не должны выводить его в новый файл? – Roboman1723 4 September 2014 в 20:12
  • 2
    @ Roboman1723 см. stackoverflow.com/a/16531920/2072269 – muru 4 September 2014 в 20:16
  • 3
    Да, вам нужно использовать опцию -f для awk. Подробности см. В справочной странице. – saptarshi nag 4 September 2014 в 20:23

Эта простая команда grep выполнит задание,

$ echo 'randomcollege-nt\user90' | grep -oP '[^\\]*$'
user90
1
ответ дан 24 May 2018 в 04:00

С sed удалять все в строке перед конкретным символом (определять в двойную скобку [Specific char]).

echo "randomcollege-nt\user90" | sed 's/.*[\]//'

Средство заменяет все символы [.*[\]) до \ ] char с символом пробела (//)

Если у вас есть файл и вы хотите заменить замену, используйте флаг -i в команде sed следующим образом:

sed -i 's/.*[\]//' /path/to/FileName
1
ответ дан 24 May 2018 в 04:00

Оригинальный вопрос, заданный для sed, но я вижу, что альтернативы популярны здесь.

Если вы используете Bash, расширение параметра на сегодняшний день является самым простым:

ORIGIN='randomcollege-nt\user90'
echo "${ORIGIN#*\\}"

Если вы потенциально ожидаете более одной обратной косой черты, удвойте символы хэша:

echo "${ORIGIN##*\\}"

Для получения дополнительной информации, man bash и поиска Parameter Expansion.

1
ответ дан 24 May 2018 в 04:00

В случае, если кто-то пытается автоматически удалить пропущенный # 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, отключив здесь токены сервера.

0
ответ дан 24 May 2018 в 04:00

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

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