ฉันจะได้รับจากสิ่งนี้:
randomcollege-nt\user90
สำหรับสิ่งนี้:
user90
ใช้งานsed
?
sed
เยี่ยมชม: grymoire.com/Unix/Sed.html
ฉันจะได้รับจากสิ่งนี้:
randomcollege-nt\user90
สำหรับสิ่งนี้:
user90
ใช้งานsed
?
sed
เยี่ยมชม: grymoire.com/Unix/Sed.html
คำตอบ:
ฉันจะใช้วิธีง่าย ๆgrep
ในการค้นหาuser90
:
$ echo "randomcollege-nt\user90" | grep -o user90
user90
หาก user90 ไม่คงที่ให้เลือกคำสั่งนี้:
$ echo "randomcollege-nt\user90" | grep -oP '(?<=randomcollege-nt\\)\w+'
user90
ในที่สุดก็ใช้sed
เพื่อแก้ไขไฟล์ในสถานที่:
$ sed -ri 's/randomcollege-nt\\(user[0-9]+)/\1/' my_file
หรือเพื่อให้ตรงกับบัญชีผู้ใช้ที่เป็นไปได้ทั้งหมด:
$ sed -ri 's/randomcollege-nt\\(\w+)/\1/' my_file
grep -F
สตริงทั้งหมด
คุณกำลังแยกวิเคราะห์ข้อความเพื่อดึงชื่อผู้ใช้ออกจากdomain\username
สตริงส่วนใหญ่น่าจะมาจาก Windows คำตอบส่วนใหญ่ข้างต้นเป็นเพียงการระบุสตริงตัวอย่างเฉพาะของคุณ
วิธีที่ดีที่สุดที่จะทำคือการใช้ regex ใน sed \
เพื่อสารสกัดจากสิ่งที่เกิดขึ้นหลังจากที่ นี่คือวิธีที่คุณจะทำ:
sed 's|.*\\\(.*\)|\1|'
ที่จะจับคู่ทุกอย่าง ( .*
) จนกระทั่งแบ็กสแลช (ที่นี่เรากำลังหลบหนีดังนั้นมัน\\
) จากนั้นจับคู่ทุกอย่างหลังจากแบ็กสแลช ( .*
) แต่ทำให้มันเป็นกลุ่มการจับภาพ (เช่นล้อมรอบวงเล็บ แต่เราต้องหลบหนีด้วย พวกเขาดังนั้น\(.*\)
) ตอนนี้เรามีสิ่งที่มาหลังจากที่ในสตริงเป็นกลุ่มจับเราพิมพ์โดยอ้างอิงกับ\
\1
คุณสามารถใช้ข้างต้นsed
คำสั่งด้วยชื่อโดเมนใด ๆ randomcollege-nt
ที่ไม่จำเป็น
$ echo "randomcollege-nt\user90" | sed 's|.*\\\(.*\)|\1|'
user90
$ echo "domain\username" | sed 's|.*\\\(.*\)|\1|'
username
$ echo "anydomainname\roboman1723" | sed 's|.*\\\(.*\)|\1|'
roboman1723
อีกsed
:
$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//'
user90
หรือ POSIXly:
$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90
sh
คุณลักษณะPOSIX pubs.opengroup.org/onlinepubs/009604599/utilities/…
ฉันรู้ว่าคุณต้องการใช้ sed แต่ฉันจะใช้สิ่งที่แตกต่าง ...
echo "randomcollege-nt\user90" | cut -d'\' -f2
นี่เป็นคำถามหรือไม่
$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90
หาก sting randomcollege-nt ไม่ต่อเนื่องให้ใช้คำสั่ง awk ด้านบน / ด้านล่าง
/user90
ไม่ได้รับuser90
ค่อนข้างคุณใช้ 'awk' เพื่อกรอง "user90":
echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
คำสั่ง grep อย่างง่ายนี้จะทำงาน
$ echo 'randomcollege-nt\user90' | grep -oP '[^\\]*$'
user90
ด้วยการsed
ลบทุกอย่างในสตริงก่อนอักขระที่เฉพาะเจาะจง (กำหนดเป็นวงเล็บคู่ [อักขระเฉพาะ]]
echo "randomcollege-nt\user90" | sed 's/.*[\]//'
หมายถึงแทนที่.*[\]
อักขระทั้งหมด ( ) หน้า\
อักขระที่มีช่องว่าง ( //
)
หากคุณมีไฟล์และต้องการแทนที่แทนที่ใช้-i
flag ในsed
คำสั่งดังนี้:
sed -i 's/.*[\]//' /path/to/FileName
คำถามเดิมถามsed
แต่ฉันเห็นว่าทางเลือกเป็นที่นิยมที่นี่
หากคุณใช้ Bash การขยายพารามิเตอร์จะง่ายที่สุด:
ORIGIN='randomcollege-nt\user90'
echo "${ORIGIN#*\\}"
หากคุณคาดหวังว่าจะมีเครื่องหมายทับขวามากกว่าหนึ่งเครื่องหมายให้เพิ่มเครื่องหมายแฮชเป็นสองเท่า:
echo "${ORIGIN##*\\}"
สำหรับข้อมูลเพิ่มเติมและการค้นหาสำหรับman bash
Parameter Expansion
ในกรณีที่ทุกคนพยายามลบความคิดเห็นออก# server_tokens off;
จาก nginx โดยอัตโนมัติเพื่อช่วยเหลือ auto dev-ops:
sudo sed -ri 's/#\s(server_tokens off;)/\1/' /etc/nginx/nginx.conf
.
ผ่านการทดสอบและใช้งานกับ nginx / 1.12.1 บน Ubuntu 16.04 LTS คำตอบที่เกี่ยวข้องกับการล็อคลง NGINX โดยการปิดเซิร์ฟเวอร์โทเค็นนี่
man the_command_name
และคุณจะได้รับคำแนะนำที่เป็นประโยชน์สำหรับคำสั่ง นอกจากนี้คุณยังสามารถไปที่ www.google.co.th และพิมพ์ "command_name tutorial" แล้วคุณจะพบคำแนะนำทีละขั้นตอนมากมาย