Bundan nasıl alabilirim:
randomcollege-nt\user90
buna:
user90
kullanarak sed?
sedZiyaret için eğitim için : grymoire.com/Unix/Sed.html
Bundan nasıl alabilirim:
randomcollege-nt\user90
buna:
user90
kullanarak sed?
sedZiyaret için eğitim için : grymoire.com/Unix/Sed.html
Yanıtlar:
Aramak için bir basit grepkullanı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 seddosyayı 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 -Fbütün dize eğer ortaya çıkıyor .
domain\usernameBü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 sedkomutu 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.
/user90değ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 sedbelirli 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 -ibayrağı sedbö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 bashiç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_nameve 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.