Як я можу отримати це:
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
або POSIXly:
$ 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
якщо жало випадковогоколежу-nt не має значення, використовуйте команду awk вище / нижче.
/user90
НЕuser90
Замість використання "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, щоб допомогти з автоматичним розробкою:
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 і ввести "посібник з іменем_команди", і ви знайдете безліч покрокових посібників.