ในบางโอกาสเราต้องการแทนที่ข้อความภายในไฟล์เช่นเปลี่ยนไฟล์ Document.txt ทุกสิ่งที่ "ครอบครัวของฉัน" พูดเพื่อ "เรา" เพื่อให้บรรลุสิ่งนี้เราสามารถใช้โปรแกรมแก้ไขข้อความที่เราต้องการ (Kate, Gedit, SublimeText ฯลฯ ) แต่การรู้จักตัวแปรวิธีอื่น ๆ เพื่อให้ได้ผลลัพธ์ที่เหมือนกันเป็นสิ่งที่ดีเสมอ
มันเกิดขึ้นด้วย นิพจน์ทั่วไป สิ่งนี้สามารถทำได้คำสั่ง sed นั้นงดงามมากมีรูปแบบและตัวเลือกที่ไม่มีที่สิ้นสุด แต่ ... สำหรับผู้ที่ต้องการแทนที่ข้อความจาก วิธีที่ซับซ้อนน้อยที่สุดเท่าที่จะทำได้สำหรับพวกเขาฉันนำตัวแปรที่ง่ายกว่านี้มาให้:
ตามตัวอย่างเรามีไฟล์ Document.txt ตั้งอยู่ใน $ HOME / Document.txt ด้วยข้อความต่อไปนี้:
(... ) ครอบครัวของฉัน ก็เหมือนกับพวกเขาทั้งหมดเช่นของคุณหรือของเพื่อนบ้าน ในความเป็นจริง ครอบครัวของฉัน เราพยายามที่จะเป็นคนที่มีความรับผิดชอบและในสายตาของสังคมถูกต้องทางการเมืองและสังคม อย่างไรก็ตามในบ้านของฉันมีแกะดำและนั่นคือบทบาทของฉันฮ่า ๆ ! ฉันเป็นคนหนึ่งที่ไม่กลัวที่จะพูดในสิ่งที่เขาคิดมาโดยตลอด (แม้ว่าจะไม่ถูกต้องในสายตาของสังคมก็ตาม) แม้ว่าในความเป็นจริงแล้วครอบครัวของฉันจะเบื่อหน่ายกับ
สิ่งสกปรกสังคมปัจจุบัน
ด้วยคำสั่งต่อไปนี้คุณจะเปลี่ยน«ครอบครัวของฉัน"โดย"nosotros":
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
มันง่ายมาก🙂
ดังนั้นข้อความจะเป็น:
(... ) nosotros ก็เหมือนกับพวกเขาทั้งหมดเช่นของคุณหรือของเพื่อนบ้าน ในความเป็นจริง nosotros เราพยายามที่จะเป็นคนที่มีความรับผิดชอบและในสายตาของสังคมถูกต้องทางการเมืองและสังคม อย่างไรก็ตามในบ้านของฉันมีแกะดำและนั่นคือบทบาทของฉันฮ่า ๆ ! ฉันเป็นคนหนึ่งที่ไม่กลัวที่จะพูดในสิ่งที่เขาคิดมาโดยตลอด (แม้ว่าจะไม่ถูกต้องในสายตาของสังคมก็ตาม) แม้ว่าในความเป็นจริงแล้วครอบครัวของฉันจะเบื่อหน่ายกับ
สิ่งสกปรกสังคมปัจจุบัน
ไวยากรณ์คือ:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
คำสั่งอาจดูซับซ้อนไปหน่อยลองแยกย่อยและอธิบายเพิ่มเติมง่ายๆ simply
- Perl : สิ่งที่เราจะใช้ perl
- -pi : Píอย่างไร π (ค่าประมาณ 3.14)
- -e : E ลองนึกภาพสำหรับ« e เพื่อดำเนินการ» ^ - ^
- จากนั้นในเครื่องหมายคำพูด » เราเปิดด้วยไฟล์ s และเราปิดด้วย g: "sg" …ลองนึกภาพ S for Start และ G สำหรับ Game Over 😀
- เลี้ยวระหว่าง sg เราต้องใส่วงเล็บสองชุด: [] y []เป็นอย่างนั้น: "S [] [] g"
- ในวงเล็บแรกตามที่ฉันได้กล่าวไว้ข้างต้นข้อความที่เราต้องการลบและแทนที่ด้วยข้อความใหม่จะไปในขณะที่ในวงเล็บชุดที่สองข้อความใหม่ที่จะใส่จะไปตามตัวอย่าง: "S [ครอบครัวของฉัน] [เรา] g"
เรียบง่ายใช่ไหม
จริงๆแล้วคำอธิบายนั้นครอบคลุมมากกว่าที่จำเป็นสำหรับคำสั่งมันค่อนข้างง่ายที่จะเข้าใจ🙂
Perl เป็นมากกว่าวิธีการแทนที่ข้อความเป็นภาษาทั้งหมด😉
หากคุณต้องการเรียนรู้เพิ่มเติมให้ติดตั้งแพคเกจ Perl-doc และดู whooodo สิ่งที่อนุญาตมันเป็นเพียงจักรวาลที่แตกต่างกัน
โดยวิธีการและเพื่อปิดสมมติว่าคุณต้องการค้นหาไฟล์. txt ทั้งหมดที่คุณมีใน $ HOME / Documents / และในแต่ละไฟล์แทนที่ "my family" ด้วย "us" คุณสามารถเข้าร่วม find + perl เพื่อทำสิ่งนี้:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
หรือใช้สัญลักษณ์แทน:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
ปัญหาของตัวแปรที่สองนี้คือจะไม่แทนที่ในไฟล์ที่อยู่ในโฟลเดอร์ย่อย🙂
อย่างไรก็ตามฉันหวังว่าคุณจะพบว่ามันน่าสนใจ สำหรับฉันมันมีประโยชน์มากฉันสามารถแทนที่ข้อความได้โดยตรงจากเทอร์มินัล ... เยี่ยมมาก! 😀
ฉันคิดว่าพวกเราหลายคนที่นี่รู้จักคำสั่ง sed ซึ่งมีจุดประสงค์เดียวกันมันทำได้ดีกว่ามากและใช้งานง่ายกว่า ...
ขอบคุณสำหรับความคิดเห็นของคุณ
รายละเอียดแค่สองอย่างทำไมถึงบอกว่า sed ทำให้ดีขึ้น? มันง่ายกว่าไหมที่จะใช้กับตัวละคร 'แปลก ๆ ' มากมาย?
สวัสดีทุกคน !!!. ฉันได้ใช้คำสั่ง ความกระหายน้ำและวิธีการที่อธิบายไว้ที่นี่ด้วย perl นั้นง่ายกว่า ขอบคุณ KZKG ^ Gaara !!!.
ขอบคุณสำหรับความคิดเห็น🙂
อย่างน้อยก็ดูเหมือนว่าสำหรับฉันมันง่ายกว่านิพจน์ทั่วไป ... ด้วยตัวละครที่ 'แปลก' มากมายสิ่งที่ซับซ้อนในการทำความเข้าใจและเรียนรู้สามารถทำได้สำหรับผู้ที่ไม่เข้าใจ
มีสุภาษิต«เก่า»อยู่ที่นั่น: «ฉันมีปัญหาฉันตัดสินใจใช้นิพจน์ทั่วไป ... ตอนนี้ฉันมีปัญหาสองอย่าง»😉
ฮาฮาฮาฮาฮาฮา !!!
การแสดงออกปกติสามารถช่วยชีวิตเราได้ถึงจุดหนึ่ง ... ใช่ต้องใช้เวลานานในการเรียนรู้วิธีใช้และไม่ต้องพยายาม
ถ้าฉันรู้คำสั่งนี้เมื่อหลายปีก่อนพระเจ้า !! ชีวิตของฉันจะเรียบง่ายแค่ไหน😀
ชัดเจน! จัดการได้ดีมีประสิทธิภาพมาก🙂ไม่มีอะไรดีไปกว่าการจัดการข้อความ แต่บางครั้งอย่างที่คุณพูดในกรณีนี้กับ Perl คุณไม่จำเป็นต้องไปไกลขนาดนั้นหากการแทนที่เพียงพอ
ฉันจะใช้ Python ต่อไป :)
แต่ในความกระหายฉันเห็นว่ามันง่ายกว่านั้น ... ฉันทำอะไรผิดหรือเปล่า?
sed -i "ใช่ / สิ่งที่ฉันต้องการเปลี่ยน / ใหม่เพื่อใส่ /" ไฟล์ในสิ่งที่จะแทนที่
เฮ้เฮ้ ... และถ้าฉันต้องการแทนที่ "http://my.blog.com/content/" ด้วย "http://my.blog.com/uploads/files/" 😀 ... มีแล้ว ใส่ \ ด้วยช่องว่างและอื่น ๆ และมันจะซับซ้อนหรือไม่?
ไม่บังคับให้ใช้ / เป็นตัวคั่น ดูด้วย +
sed -i « s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+ »ไฟล์
O_O… WTF!
คุณได้เปิดทางเลือกมากมายให้ฉันแล้ว .. O_O
ฉันชอบโพสต์เหล่านี้ที่เราทุกคนได้เรียนรู้บางสิ่ง🙂
ฉันไม่รู้เหมือนกัน
ฉันชอบใช้โดยตรง vi ..
ง่ายเหมือน:
:% s / us / my family / g
% -> เอกสารทั้งหมด
s -> ค้นหา
g -> เหตุการณ์ทั้งหมด
ทักทาย ..
ขอบคุณ!
ไม่รู้จะทำอย่างไรกับ vi
เพิ่มในรายการโปรดแล้ว!
ขอบคุณ!
ลองดูถ้าคุณมีคำสั่ง rpl เล็กน้อย
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
รายการเยี่ยม! ในกรณีที่ใครสนใจเช่นเดียวกันกับคำสั่ง Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html
และจะเกิดอะไรขึ้นถ้าในไฟล์สิ่งที่ฉันต้องการแทนที่มีเครื่องหมายคำพูด?
ตัวอย่างแทนที่สิ่งที่ระบุว่าข้อความ: » 1″ ด้วยข้อความ: » 2″
คำสั่งจะเป็นอย่างไร
สวัสดี
ฉันต้องการแทนที่สตริงที่มี @ อยู่ตรงกลางและเปลี่ยนข้อความก่อนหน้า.
ข้อความที่จะเปลี่ยนแปลง: Viva el Perú
ข้อความใหม่: Viva mi patria @percysalgado
แสดง: อาศัยบ้านเกิดเมืองนอนของฉันมานาน
ขอบคุณสำหรับความช่วยเหลือของคุณ
"\" คุณต้องใช้เครื่องหมายทับก่อนอักขระที่มีการใช้ @, # สองครั้งจึงจะตีความเป็นข้อความได้
แล้วลง windows ได้ยังไง ????