Удалите первую часть строки с помощью sed

Как делают я добираюсь от этого:

randomcollege-nt\user90

к этому:

user90

использование sed?

14
задан 5 September 2014 в 17:39

10 ответов

Я использовал бы простое 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
15
ответ дан 16 November 2019 в 13:34

Вы анализируете некоторый текст для извлечения имени пользователя из 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
19
ответ дан 16 November 2019 в 13:34

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

echo "randomcollege-nt\user90" | cut -d'\' -f2
9
ответ дан 16 November 2019 в 13:34

Другой sed:

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

или POSIXly:

$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90
10
ответ дан 16 November 2019 в 13:34

Действительно ли это - вопрос?

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

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

5
ответ дан 16 November 2019 в 13:34

Скорее Вы используете 'awk' для фильтрации "user90":

echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
3
ответ дан 16 November 2019 в 13:34

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

$ echo 'randomcollege-nt\user90' | grep -oP '[^\\]*
user90
1
ответ дан 16 November 2019 в 13:34


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

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

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

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

sed -i 's/.*[\]//' /path/to/FileName
1
ответ дан 16 November 2019 в 13:34

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

при использовании Bash расширение параметра является безусловно самым простым:

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

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

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

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

1
ответ дан 16 November 2019 в 13:34

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

0
ответ дан 23 November 2019 в 02:53

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

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