Bagaimana saya dapatkan dari ini:
randomcollege-nt\user90
untuk ini:
user90
menggunakan sed
?
sed
kunjungan: grymoire.com/Unix/Sed.html
Bagaimana saya dapatkan dari ini:
randomcollege-nt\user90
untuk ini:
user90
menggunakan sed
?
sed
kunjungan: grymoire.com/Unix/Sed.html
Jawaban:
Saya akan menggunakan sederhana grep
untuk 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 sed
untuk 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 -F
seluruh string.
Anda menguraikan beberapa teks untuk mengekstrak nama pengguna dari sebuah domain\username
string, 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 sed
perintah 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
sh
fitur 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.
/user90
tidak 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 sed
menghapus 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 -i
flag in sed
command 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 bash
dan 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_name
dan 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.