Bagaimana saya dapatkan dari ini:
randomcollege-nt\user90
untuk ini:
user90
menggunakan sed?
sedkunjungan: grymoire.com/Unix/Sed.html
Bagaimana saya dapatkan dari ini:
randomcollege-nt\user90
untuk ini:
user90
menggunakan sed?
sedkunjungan: grymoire.com/Unix/Sed.html
Jawaban:
Saya akan menggunakan sederhana grepuntuk mencari user90:
$ echo "randomcollege-nt\user90" | grep -o user90
user90
Jika user90 tidak konstan, lebih suka perintah ini:
$ echo "randomcollege-nt\user90" | grep -oP '(?<=randomcollege-nt\\)\w+'
user90
Akhirnya gunakan seduntuk mengedit file di tempat:
$ sed -ri 's/randomcollege-nt\\(user[0-9]+)/\1/' my_file
Atau untuk mencocokkan semua akun pengguna yang mungkin:
$ sed -ri 's/randomcollege-nt\\(\w+)/\1/' my_file
grep -Fseluruh string.
Anda menguraikan beberapa teks untuk mengekstrak nama pengguna dari sebuah domain\usernamestring, kemungkinan besar dari Windows. Sebagian besar jawaban di atas hanya menjawab string contoh spesifik Anda.
Cara terbaik untuk melakukan ini adalah menggunakan regex dalam sed untuk mengekstrak apa pun yang terjadi setelahnya \. Begini cara Anda melakukannya:
sed 's|.*\\\(.*\)|\1|'
Itu akan cocok dengan semuanya ( .*) sampai garis miring terbalik (di sini, kita lolos, jadi begitu \\), lalu cocokkan semuanya setelah garis miring terbalik ( .*), tetapi menjadikannya grup penangkap (yaitu membungkus tanda kurung di sekitarnya, tetapi kita juga harus melarikan diri mereka, jadi \(.*\)). Sekarang kita memiliki apa pun yang muncul setelah \dalam string sebagai grup tangkap, kita mencetaknya dengan merujuknya \1.
Anda dapat menggunakan sedperintah di atas dengan nama domain apa saja, tidak harus randomcollege-nt.
$ echo "randomcollege-nt\user90" | sed 's|.*\\\(.*\)|\1|'
user90
$ echo "domain\username" | sed 's|.*\\\(.*\)|\1|'
username
$ echo "anydomainname\roboman1723" | sed 's|.*\\\(.*\)|\1|'
roboman1723
Lainnya sed:
$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//'
user90
atau POSIXly:
$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90
shfitur POSIX . pubs.opengroup.org/onlinepubs/009604599/utilities/…
Saya tahu Anda ingin menggunakan sed, tapi saya akan menggunakan sesuatu yang berbeda ...
echo "randomcollege-nt\user90" | cut -d'\' -f2
Apakah ini pertanyaannya?
$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90
jika status acak-nt tidak ada, gunakan perintah awk di atas / bawah.
/user90tidak mendapatkanuser90
Alih-alih Anda menggunakan 'awk' untuk memfilter "user90":
echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
Perintah grep sederhana ini akan melakukan pekerjaan,
$ echo 'randomcollege-nt\user90' | grep -oP '[^\\]*$'
user90
Dengan sedmenghapus semua yang ada di string sebelum karakter tertentu (tentukan menjadi braket ganda [Spesifik char]).
echo "randomcollege-nt\user90" | sed 's/.*[\]//'
Berarti mengganti semua ( .*[\]) karakter sebelum \char dengan karakter whitespace ( //)
Jika Anda memiliki file dan ingin menggantikan ganti gunakan -iflag in sedcommand seperti ini:
sed -i 's/.*[\]//' /path/to/FileName
Pertanyaan aslinya diajukan sed, tetapi saya melihat bahwa alternatifnya populer di sini.
Jika Anda menggunakan Bash, ekspansi parameter adalah yang paling sederhana:
ORIGIN='randomcollege-nt\user90'
echo "${ORIGIN#*\\}"
Jika Anda berpotensi mengharapkan lebih dari satu garis miring terbalik, gandakan tanda hash:
echo "${ORIGIN##*\\}"
Untuk informasi lebih lanjut, man bashdan cari Parameter Expansion.
Jika ada orang yang mencoba untuk menghapus komentar # server_tokens off;dari nginx secara otomatis untuk membantu dengan auto dev-ops:
sudo sed -ri 's/#\s(server_tokens off;)/\1/' /etc/nginx/nginx.conf.
Diuji dan berfungsi untuk nginx / 1.12.1 di Ubuntu 16.04 LTS. Jawaban terkait untuk mengunci NGINX dengan mematikan token server di sini .
man the_command_namedan Anda akan mendapatkan buku petunjuk yang bermanfaat untuk perintah tersebut. Anda juga dapat mengunjungi www.google.com dan mengetik "tutorial command_name" dan Anda akan menemukan banyak panduan langkah-demi-sisi.