sed สามารถบันทึกเอาต์พุตไปยังไฟล์ได้หรือไม่?


33

> สามารถทำได้

echo "text" > file

tee สามารถทำได้

echo "test" | tee file 

สามารถsedทำได้โดยไม่ใช้ข้อใดข้อหนึ่งข้างต้นหรือไม่ เป็นไปได้หรือไม่ที่จะบันทึกเอาต์พุตของsedคำสั่งไปยังไฟล์โดยไม่ใช้อย่างใดอย่างหนึ่ง>หรือtee?


โปรดลองค้นหาคำตอบด้วยตัวเองก่อนโพสต์คำถามที่นี่ สิ่งแรกที่เราถามผู้ใช้ของเราคือการค้นหาและวิจัยก่อนโพสต์ สิ่งที่คุณต้องทำคือsed '' file > newfileคุณจะเห็นว่า>สามารถใช้งานได้sedเหมือนกับโปรแกรมอื่น ๆ
terdon

1
ยังคงใช้>โอเปอเรเตอร์อยู่ ฉันสนใจถ้ามีคำสั่ง sed ที่สามารถใช้แทนได้ แต่ฉันจะลบคำถามนี้ถ้ามันแย่มาก
Folatt

อ่าใช่มั้ย ตกลงนั่นเป็นคำถามที่แตกต่างกันมาก เมื่อคุณยอมรับsed -iคำตอบฉันจะแก้ไขคำถามของคุณและอธิบายสิ่งที่คุณทำหลังจากนั้น
terdon

ฉันยอมรับ " sed ไม่ได้มีไว้สำหรับการเปลี่ยนเส้นทางข้อมูลในฐานะteeและ>(เป็น) หมายถึงเป็น"
Folatt

คำตอบ:


49

tee และ> สามารถใช้สำหรับการเปลี่ยนเส้นทางข้อมูลได้เนื่องจากมีวัตถุประสงค์เพื่อใช้สำหรับการเปลี่ยนเส้นทางข้อมูลใน linux

sed ในทางกลับกันเป็นตัวแก้ไขสตรีม sed ไม่ได้มีไว้สำหรับการเปลี่ยนเส้นทางข้อมูลเป็น tee และ> หมายถึงเป็น อย่างไรก็ตามคุณสามารถใช้การรวมคำสั่งเพื่อทำเช่นนั้นได้

ใช้ทีหรือ> กับ sed

sed 's/Hello/Hi/g' file-name | tee file

หรือ

sed 's/Hello/Hi/g' file-name > file

ใช้ sed กับตัวเลือก -i

sed -i 's/Hello/Hi/g' file-name

อันสุดท้ายไม่ได้เปลี่ยนเส้นทาง แต่มันจะทำการเปลี่ยนแปลงในไฟล์เอง


2
ขอบคุณ คุณเข้าใจคำถามของฉัน ดังนั้นคำตอบคือไม่ ฉันคิดว่าsedมันอาจเป็นไปได้เพราะมันสามารถสร้างไฟล์สำรองด้วย-i.bakตัวเลือก
Folatt

2
แก้ไข. นอกจากนี้ -i.bak ไม่ใช่ตัวเลือกคงที่คุณสามารถใช้ส่วนขยายใด ๆ ก็ได้ซึ่งคุณต้องการให้ไฟล์สำรองของคุณมี สำหรับอดีต -i.log จะทำงานเช่นกัน :)
ankidaemon

ฉันแค่อยากจะเพิ่มที่กำลังมองหาจริงecho "test" | dd of=file status=noneระงับการแสดงผลของเสียงก้องโดยไม่ต้องใช้การเปลี่ยนเส้นทางการส่งออกที่คลุมเครือ2> /dev/nullแต่แทนที่จะถามข้อ จำกัด ของ sed ฉันประทับใจในความสามารถของ sed เพราะมันสามารถต่อท้ายบรรทัดในไฟล์ทำให้ฉันรู้สึกว่า sed สามารถทำอะไรก็ได้ที่สามารถทำได้และอีกมากมาย
Folatt

11

sedมีwคำสั่งที่อาจทำสิ่งที่คุณต้องการ:

ชื่อไฟล์

เขียนพื้นที่รูปแบบปัจจุบันไปยังชื่อไฟล์

sed 'w file'tee fileตัวของมันเองจะมีผลเช่นเดียวกับ หากมีคำสั่ง sed อื่น ๆ ให้ใส่คำสั่งwสุดท้าย:

sed 's/This/That/;w file'

อย่างไรก็ตาม-n/--quiet/--silentตัวเลือกนี้จะไม่ได้รับผลกระทบ นั่นเป็นการระงับเนื้อหาที่จะไปยังเอาต์พุตมาตรฐานเท่านั้น


0

ในฐานะที่เป็น ankidaemon อย่างถูกต้องชี้ให้เห็นว่าเราสามารถบันทึกการส่งออกไปยังไฟล์ ฉันต้องการเพิ่มว่าถ้าเรากำลังดำเนินการบางอย่างในไฟล์เช่นแทนที่และต้องการบันทึกผลลัพธ์ไปยังไฟล์เดียวกัน มี-iแฟsedล็กที่ทำให้สามารถแก้ไข inplace ได้ อย่างไรก็ตามสิ่งนี้จะสร้างไฟล์สำรองในกระบวนการ หากไม่ต้องการก็สามารถทำได้โดยเพียงแค่ส่งชื่อไฟล์ที่ว่างเปล่าเพื่อ-iตั้งค่าสถานะ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.