Làm thế nào để tôi có được từ này:
randomcollege-nt\user90
đến đây:
user90
sử dụng sed
?
sed
chuyến thăm: grymoire.com/Unix/Sed.html
Làm thế nào để tôi có được từ này:
randomcollege-nt\user90
đến đây:
user90
sử dụng sed
?
sed
chuyến thăm: grymoire.com/Unix/Sed.html
Câu trả lời:
Tôi muốn sử dụng một cách đơn giản grep
để tìm kiếm user90
:
$ echo "randomcollege-nt\user90" | grep -o user90
user90
Nếu user90 không đổi, hãy thích lệnh này:
$ echo "randomcollege-nt\user90" | grep -oP '(?<=randomcollege-nt\\)\w+'
user90
Cuối cùng sử dụng sed
để chỉnh sửa tập tin tại chỗ:
$ sed -ri 's/randomcollege-nt\\(user[0-9]+)/\1/' my_file
Hoặc để khớp với tất cả các tài khoản người dùng có thể:
$ sed -ri 's/randomcollege-nt\\(\w+)/\1/' my_file
grep -F
toàn bộ chuỗi.
Bạn đang phân tích một số văn bản để trích xuất tên người dùng từ một domain\username
chuỗi, rất có thể là từ Windows. Hầu hết các câu trả lời trên chỉ giải quyết chuỗi ví dụ cụ thể của bạn.
Cách tốt nhất để làm điều này là sử dụng regex trong sed để trích xuất bất cứ thứ gì có sau \
. Đây là cách bạn sẽ làm điều đó:
sed 's|.*\\\(.*\)|\1|'
Điều đó sẽ khớp với tất cả mọi thứ ( .*
) cho đến khi dấu gạch chéo ngược (ở đây, chúng ta đang thoát nó, vì vậy nó \\
), sau đó khớp với mọi thứ sau dấu gạch chéo ngược ( .*
), nhưng làm cho nó trở thành một nhóm bắt giữ (ví dụ: đóng dấu ngoặc quanh nó, nhưng chúng ta cũng phải thoát họ, vì vậy \(.*\)
). Bây giờ chúng ta có bất cứ thứ gì xuất hiện sau \
chuỗi trong một nhóm chụp, chúng ta in nó bằng cách tham chiếu nó với \1
.
Bạn có thể sử dụng sed
lệnh trên với bất kỳ tên miền nào, không nhất thiết phải như vậy randomcollege-nt
.
$ echo "randomcollege-nt\user90" | sed 's|.*\\\(.*\)|\1|'
user90
$ echo "domain\username" | sed 's|.*\\\(.*\)|\1|'
username
$ echo "anydomainname\roboman1723" | sed 's|.*\\\(.*\)|\1|'
roboman1723
Khác sed
:
$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//'
user90
hoặc POSIXly:
$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90
sh
tính năng POSIX . pubs.opengroup.org/onlinepubs/009604599/utilities/...
Tôi biết bạn muốn sử dụng sed, nhưng tôi sẽ sử dụng thứ gì đó khác ...
echo "randomcollege-nt\user90" | cut -d'\' -f2
Đây có phải là câu hỏi?
$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90
nếu sting Randomcolitic-nt không được sử dụng lệnh awk phía trên / bên dưới.
/user90
không nhận đượcuser90
Thay vào đó, bạn sử dụng 'awk' để lọc "user90":
echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
Lệnh grep đơn giản này sẽ thực hiện công việc,
$ echo 'randomcollege-nt\user90' | grep -oP '[^\\]*$'
user90
Với việc sed
xóa mọi thứ trong một chuỗi trước một ký tự cụ thể (xác định thành dấu ngoặc kép [char cụ thể]).
echo "randomcollege-nt\user90" | sed 's/.*[\]//'
Có nghĩa là thay thế tất cả ( .*[\]
) ký tự trước một \
char bằng ký tự khoảng trắng ( //
)
Nếu bạn có một tập tin và muốn thay thế, hãy sử dụng -i
cờ trong sed
lệnh như thế này:
sed -i 's/.*[\]//' /path/to/FileName
Câu hỏi ban đầu được yêu cầu sed
, nhưng tôi thấy rằng các lựa chọn thay thế là phổ biến ở đây.
Nếu bạn đang sử dụng Bash, việc mở rộng tham số đơn giản nhất:
ORIGIN='randomcollege-nt\user90'
echo "${ORIGIN#*\\}"
Nếu bạn có khả năng mong đợi nhiều hơn một dấu gạch chéo ngược, hãy nhân đôi dấu băm:
echo "${ORIGIN##*\\}"
Để biết thêm thông tin, man bash
và tìm kiếm Parameter Expansion
.
Trong trường hợp bất cứ ai đang cố gắng tự động xóa nhận xét khỏi # server_tokens off;
nginx để trợ giúp với tự động phát triển:
sudo sed -ri 's/#\s(server_tokens off;)/\1/' /etc/nginx/nginx.conf
.
Đã thử nghiệm và làm việc cho nginx / 1.12.1 trên Ubuntu 16.04 LTS. Câu trả lời liên quan để khóa NGINX bằng cách tắt mã thông báo máy chủ tại đây .
man the_command_name
và bạn sẽ nhận được hướng dẫn sử dụng hữu ích cho lệnh. Bạn cũng có thể truy cập www.google.com và nhập "hướng dẫn Command_name" và bạn sẽ tìm thấy nhiều hướng dẫn từng bước.