Bundan nasıl alabilirim:
randomcollege-nt\user90
buna:
user90
kullanarak sed
?
sed
Ziyaret için eğitim için : grymoire.com/Unix/Sed.html
Bundan nasıl alabilirim:
randomcollege-nt\user90
buna:
user90
kullanarak sed
?
sed
Ziyaret için eğitim için : grymoire.com/Unix/Sed.html
Yanıtlar:
Aramak için bir basit grep
kullanırdım user90
:
$ echo "randomcollege-nt\user90" | grep -o user90
user90
User90 sabit değilse bu komutu tercih edin:
$ echo "randomcollege-nt\user90" | grep -oP '(?<=randomcollege-nt\\)\w+'
user90
Son olarak sed
dosyayı yerinde düzenlemek için kullanın:
$ sed -ri 's/randomcollege-nt\\(user[0-9]+)/\1/' my_file
Veya olası tüm kullanıcı hesaplarını eşleştirmek için:
$ sed -ri 's/randomcollege-nt\\(\w+)/\1/' my_file
grep -F
bütün dize eğer ortaya çıkıyor .
domain\username
Büyük olasılıkla Windows'tan bir dizeden kullanıcı adını ayıklamak için bir metin ayrıştırıyorsunuz . Yukarıdaki yanıtların çoğu yalnızca sizin örnek dizginize yöneliktir.
Bunu yapmanın en iyi yolu, sonra gelenleri ayıklamak için sed'de regex kullanmaktır \
. Bunu nasıl yapacağınız aşağıda açıklanmıştır:
sed 's|.*\\\(.*\)|\1|'
Bu, .*
bir ters eğik çizgi (burada, kaçıyoruz, bu yüzden) kadar her şeyi ( ) \\
eşleştirecek, sonra ters eğik çizgiden ( .*
) sonra her şeyi eşleştirecek , ancak bir yakalama grubu haline getirecek (yani, köşeli parantezleri sarın, ama aynı zamanda kaçmalıyız) böylece \(.*\)
). Artık \
bir yakalama grubu olarak dizeden sonra gelen her şeye sahip olduğumuza göre, onu referans alarak yazdırıyoruz \1
.
Yukarıdaki sed
komutu zorunlu olarak herhangi bir alan adıyla kullanabilirsiniz randomcollege-nt
.
$ echo "randomcollege-nt\user90" | sed 's|.*\\\(.*\)|\1|'
user90
$ echo "domain\username" | sed 's|.*\\\(.*\)|\1|'
username
$ echo "anydomainname\roboman1723" | sed 's|.*\\\(.*\)|\1|'
roboman1723
Başka bir sed
:
$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//'
user90
veya POSIXly:
$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90
sh
özelliğidir. pubs.opengroup.org/onlinepubs/009604599/utilities/…
Sed kullanmak istediğini biliyorum, ama farklı bir şey kullanırdım ...
echo "randomcollege-nt\user90" | cut -d'\' -f2
Soru bu mu?
$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90
Eğer sting randomcollege-nt sabit değilse yukarıdaki / altındaki awk komutasını kullanın.
/user90
değiluser90
Bunun yerine "user90" ı filtrelemek için "awk" kullanırsınız:
echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
Bu basit grep komutu işi yapacak,
$ echo 'randomcollege-nt\user90' | grep -oP '[^\\]*$'
user90
İle sed
belirli bir karakterin önüne bir dizede silme şeyi (çift parantez [Özgül Char] içine tanımlamak).
echo "randomcollege-nt\user90" | sed 's/.*[\]//'
Tümünü değiştir anlamına gelir (.*[\]
Bir karakterden önce\
boşluk karakterlerini boşluk karakteri ( //
) ile değiştirir
Eğer bir dosya var ve kullanmak yerine InPlace istiyorsanız -i
bayrağı sed
böyle komuta:
sed -i 's/.*[\]//' /path/to/FileName
Sorulan orijinal soru sed
, ancak burada alternatiflerin popüler olduğunu görüyorum.
Bash kullanıyorsanız, parametre genişletme açık ara en basit olanıdır:
ORIGIN='randomcollege-nt\user90'
echo "${ORIGIN#*\\}"
Potansiyel olarak birden fazla ters eğik çizgi bekliyorsanız, karma işaretlerini iki katına çıkarın:
echo "${ORIGIN##*\\}"
Daha fazla bilgi man bash
için arama yapın Parameter Expansion
.
# server_tokens off;
Otomatik dev-op'lara yardımcı olması için herhangi bir yorumun nginx'ten otomatik olarak kaldırmaya çalışması durumunda :
sudo sed -ri 's/#\s(server_tokens off;)/\1/' /etc/nginx/nginx.conf
.
Ubuntu 16.04 LTS'de nginx / 1.12.1 için test edildi ve çalışıyor. Burada sunucu belirteçlerini kapatarak NGINX'i kilitlemeyle ilgili yanıt .
man the_command_name
ve komut için yararlı bir kullanım kılavuzu alırsınız. Ayrıca www.google.com adresine gidip "komut_adı öğreticisi" yazabilirsiniz ve birçok adım adım kılavuz bulacaksınız.