คำถามติดแท็ก sed

sed เป็นตัวแก้ไขสตรีมบรรทัดคำสั่งสำหรับการกรองและแปลงข้อความ

5
ฉันจะแก้ไข n บรรทัดสุดท้ายในไฟล์ได้อย่างไร
มีคำสั่งให้ฉันแก้ไขบรรทัดสุดท้ายในไฟล์หรือไม่? ฉันมีไฟล์หลายไฟล์ซึ่งทั้งหมดมีจำนวนบรรทัดต่างกัน แต่ฉันต้องการแก้ไข n บรรทัดสุดท้ายในแต่ละไฟล์ เป้าหมายคือการแทนที่เครื่องหมายจุลภาคด้วยเครื่องหมายอัฒภาคในบรรทัดสุดท้าย n แต่จะอยู่ในบรรทัดสุดท้ายเท่านั้น ฉันไม่ต้องการลบบรรทัดใด ๆ ฉันเพียงต้องการแทนที่เครื่องหมายจุลภาคทุกอันด้วยเครื่องหมายอัฒภาคในบรรทัดสุดท้าย n ในแต่ละไฟล์ การใช้คำสั่ง sed ฉันสามารถแทนที่บรรทัดสุดท้ายด้วยคำสั่งนี้ได้ ตามที่อธิบายไว้ที่นี่: ฉันจะลบข้อความในบรรทัดสุดท้ายของไฟล์ได้อย่างไร แต่นี่ทำให้ฉันสามารถแก้ไขบรรทัดสุดท้ายเท่านั้นไม่ใช่บรรทัดสุดท้าย

8
วิธีลบบรรทัดหากมีอักขระหนึ่งครั้ง
ฉันต้องการลบบรรทัดออกจากไฟล์ที่มีอักขระเฉพาะเพียงครั้งเดียวหากมีมากกว่าหนึ่งครั้งหรือไม่มีอยู่ให้เก็บบรรทัดไว้ในไฟล์ ตัวอย่างเช่น: DTHGTY FGTHDC HYTRHD HTCCYD JUTDYC ที่นี่ตัวละครที่ฉันต้องการลบนั้นเป็นCเช่นนั้นคำสั่งควรลบบรรทัดFGTHDCและJUTDYCเพราะพวกเขามีCเพียงครั้งเดียว ฉันจะทำสิ่งนี้โดยใช้อย่างใดอย่างหนึ่งsedหรือawk?

5
แทนที่ขีดล่างด้วยเครื่องหมายจุลภาคและลบเครื่องหมายคำพูดคู่ใน CSV
ฉันมีไฟล์ CSV เป็น input.csv "1_1_0_0_76" "1_1_0_0_77" "1_1_0_0_78" "1_1_0_0_79" "1_1_0_0_80" "1_1_0_0_81" "1_1_0_0_82" "1_1_0_0_83" "1_1_0_0_84" "1_1_0_0_85" ............. เป็นต้น ฉันต้องการแปลงไฟล์ CSV นี้เป็น result.csv 1,1,0,0,76 1,1,0,0,77 1,1,0,0,78 1,1,0,0,79 1,1,0,0,80 1,1,0,0,81 1,1,0,0,82 1,1,0,0,83 1,1,0,0,84 1,1,0,0,85

6
จะแทนที่ epoch timestamps ในไฟล์ด้วยรูปแบบอื่นได้อย่างไร?
ฉันมีไฟล์ที่มีวันที่ในยุคที่ฉันต้องการเปลี่ยนเป็นคนอ่านได้ ฉันรู้วิธีการแปลงวันที่แล้วเช่น: [server01 ~]$ date -d@1472200700 Fri 26 Aug 09:38:20 BST 2016 .. แต่ฉันพยายามหาวิธีsedผ่านไฟล์และแปลงรายการทั้งหมด รูปแบบไฟล์มีลักษณะดังนี้: #1472047795 ll /data/holding/email #1472047906 cat /etc/rsyslog.conf #1472048038 ll /data/holding/web

9
แปลงแถวเป็นคอลัมน์
ฉันมีไฟล์ที่มีรายละเอียดเกี่ยวกับ VM ที่ทำงานในไฮเปอร์ไวเซอร์ เรารันคำสั่งบางคำสั่งแล้วเปลี่ยนเส้นทางผลลัพธ์ไปยังไฟล์ และเป็นข้อมูลที่มีอยู่ในรูปแบบด้านล่าง Virtual Machine : OL6U5 ID : 0004fb00000600003da8ce6948c441bb Status : Running Memory : 65536 Uptime : 17835 Minutes Server : MyOVS1.vmorld.com Pool : HA-POOL HA Mode: false VCPU : 16 Type : Xen PVM OS : Oracle Linux 6 Virtual Machine : OL6U6 ID : 0004fb00000600003da8ce6948c441bc …

2
ลบเครื่องหมายจุลภาคต่อท้ายในบรรทัด
ฉันจะลบชุดของเครื่องหมายจุลภาคต่อท้ายใน bash ได้อย่างไร: a,b,c,d,,,, 1,2,3,,,, ผลลัพธ์ที่ต้องการ: a,b,c,d 1,2,3 พยายามทำสิ่งนี้: grep "5628" test.csv | sed 's/,*$//g' แต่มันไม่ทำงาน ไฟล์มาจากเครื่องที่ใช้ Windows
10 sed 

6
วิธีการแทนที่รูปแบบที่ N เกิดขึ้นในไฟล์ได้อย่างไร
วิธีแทนที่สตริงที่สามในไฟล์โดยใช้sedคำสั่ง ตัวอย่าง: เปลี่ยนเฉพาะเหตุการณ์ที่สามของisเป็นusในไฟล์ ไฟล์อินพุตของฉันประกอบด้วย: hai this is linux. hai this is unix. hai this is mac. hai this is unchanged. ฉันคาดหวังผลลัพธ์คือ: hai this is linux. hai thus is unix. hai this is mac. hai this is unchanged.


3
ฉันจะลบข้อความทั้งหมดระหว่างวงเล็บปีกกาในไฟล์ข้อความหลายบรรทัดได้อย่างไร
ตัวอย่าง: This is { the multiline text file } that wants { to be changed } anyway. ควรเป็น: This is that wants anyway. ฉันพบเธรดที่คล้ายกัน ในฟอรัม แต่ดูเหมือนว่าจะไม่สามารถใช้กับวงเล็บปีกกาแบบหลายบรรทัดได้ ถ้าเป็นไปได้ฉันต้องการวิธีการหนึ่งบรรทัดเช่นโซลูชันที่ใช้ grep, sed, awk ... เป็นต้น แก้ไข: โซลูชั่นดูเหมือนจะตกลง แต่ฉันได้สังเกตเห็นว่าไฟล์ต้นฉบับของฉันรวมถึงการทำเครื่องหมายวงเล็บปีกกา ดังนั้นฉันกำลังเปิดคำถามใหม่ ขอบคุณทุกคน: ฉันจะลบข้อความทั้งหมดระหว่างวงเล็บปีกกาแบบซ้อนในไฟล์ข้อความแบบหลายบรรทัดได้อย่างไร?

4
แทนที่สตริงที่มีอักขระขึ้นบรรทัดใหม่
ด้วยbashเปลือกในไฟล์ที่มีแถวเหมือนคนดังต่อไปนี้ first "line" <second>line and so on ฉันต้องการแทนที่ด้วยหนึ่งครั้งหรือมากกว่านั้น"line"\n<second>ด้วยother charactersและรับในแต่ละครั้ง: first other characters line and so on ดังนั้นผมจึงต้องเปลี่ยนสตริงทั้งที่มีตัวอักษรพิเศษเช่น"และ<และด้วยตัวอักษรขึ้นบรรทัดใหม่ หลังจากค้นหาคำตอบอื่น ๆ ฉันพบว่าsedสามารถยอมรับการขึ้นบรรทัดใหม่ทางด้านขวาของคำสั่ง (เช่นนั้นother charactersสตริง) แต่ไม่ใช่ทางด้านซ้าย มีวิธี (ง่ายกว่านี้ ) ในการรับผลลัพธ์นี้ด้วยsedหรือgrepไม่?

7
ฉันจะ "ผสาน" รูปแบบในบรรทัดเดียวได้อย่างไร
ฉันกำลังทำ grep และ sed และฉันได้รับไฟล์ 2 บรรทัดที่ฉันสนใจฉันจะรับบรรทัดเหล่านี้ในบรรทัดเดียวที่ลงท้ายด้วยอักขระบรรทัดใหม่ได้อย่างไร ตอนนี้ฉันได้รับ: pattern1 pattern2 ฉันอยากได้ pattern1 pattern2 \n

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

4
ลบเฉพาะเครื่องหมายจุลภาคที่อยู่ในเครื่องหมายคำพูดคู่
ในไฟล์ข้อความฉันต้องการลบ,(เครื่องหมายจุลภาค) และ"(เครื่องหมายคำพูด) (เฉพาะเมื่อเครื่องหมายคำพูดคู่มีตัวเลขคั่นด้วยเครื่องหมายจุลภาค) 56,72,"12,34,54",x,y,"foo,a,b,bar" ouput ที่คาดหวัง 56,72,123454,x,y,"foo,a,b,bar" หมายเหตุ:ฉันแสดงบรรทัดด้านบนเป็นตัวอย่าง ไฟล์ข้อความของฉันมีหลายบรรทัดเหมือนด้านบนและตัวเลขที่คั่นด้วยเครื่องหมายจุลภาคที่อยู่ในเครื่องหมายคำพูดคู่ควรเปลี่ยนไป นั่นคือ, 56,72,"12,34,54",x,y,"foo,a,b,bar" 56,92,"12,34",x,y,"foo,a,b,bar" 56,72,"12,34,54,78,76,54,67",x,y,"foo,a,b,bar" 56,72,x,y,"foo,a,b,bar","12,34,54" 56,72,x,y,"foo,a,b,bar","12,34,54","45,57,84,92","bar,foo" ผลลัพธ์ที่คาดหวัง: 56,72,123454,x,y,"foo,a,b,bar" 56,92,1234,x,y,"foo,a,b,bar" 56,72,12345478765467,x,y,"foo,a,b,bar" 56,72,x,y,"foo,a,b,bar",123454 56,72,x,y,"foo,a,b,bar",123454,45578492,"bar,foo" มีnตัวเลขอยู่ในเครื่องหมายคำพูดคู่คั่นด้วยเครื่องหมายจุลภาค และยังเว้นเครื่องหมายคำพูดคู่ซึ่งมีอักขระเหมือนเดิม ฉันรักsedเครื่องมือประมวลผลข้อความ ฉันดีใจที่คุณโพสต์sedวิธีแก้ปัญหาสำหรับเรื่องนี้

6
ทุบตีหาบรรทัดที่ขึ้นต้นด้วยสตริง
ฉันมีไฟล์หลายไฟล์และต้องการค้นหาว่าไฟล์ใดมีบรรทัดเรียงตามลำดับที่ขึ้นต้นด้วยสตริงที่แน่นอน ตัวอย่างเช่นสำหรับไฟล์ต่อไปนี้: Aaaaaaaaaaaa Baaaaaaaaaaa Cxxxxxxxxx Cyyyyyyyyy Czzzzzzzzz Abbbbbbbbbbb Bbbbbbbbbbbb Caaaaaa Accccccccccc Bccccccccccc Cdddddd Ceeeeee มีมากกว่าหนึ่งบรรทัดที่ขึ้นต้นด้วย 'C' ดังนั้นฉันต้องการให้ไฟล์นี้ถูกค้นพบโดยคำสั่ง ตัวอย่างเช่นสำหรับไฟล์ต่อไปนี้: Aaaaaaaaaaaa Baaaaaaaaaaa Cxxxxxxxxx Abbbbbbbbbbb Bbbbbbbbbbbb Caaaaaa Accccccccccc Bccccccccccc Cdddddd มีหนึ่งบรรทัดที่ขึ้นต้นด้วย 'C' เสมอฉันไม่ต้องการไฟล์นี้ ฉันคิดว่าจะใช้ a grepหรือ a sedแต่ฉันไม่รู้วิธีการใช้ อาจใช้ regexp ^C.*$^Cหรืออะไรทำนองนั้น ความคิดใด ๆ
10 bash  sed  grep  string 

2
เหตุใดจึงไม่ใช้โหมดเสริม regex เป็นค่าเริ่มต้น
ฉันกำลังใช้ sed ฉันใช้ regex ที่ถูกต้องเท่าที่ฉันจะเห็น แต่ sed ไม่ได้ทำอะไร ปรากฎว่าฉันใช้\s+ซึ่ง sed ไม่สามารถเข้าใจและเมื่อฉันเปลี่ยนไป[ ]+ใช้งานได้ ดังนั้นเพื่อสรุปฉันสร้าง regex เพื่อให้ทำงานฉันต้องหลบหนีเกือบทุกอย่างและลบ\sช่องว่างออก ดูเหมือนว่ามีโหมดที่จะหลีกเลี่ยงสิ่งเหล่านี้ทั้งหมดซึ่งเป็น-rดังนั้นฉันต้องการถาม: เหตุใดจึงไม่-rเป็นโหมดเริ่มต้นสำหรับ sed ทำไมฉันต้องไปเจอปัญหามากมายเพื่อหลบหนีทุกอย่าง? manบอกว่ามีตัวเลือก--posixและ "POSIX.2 BREs ควรได้รับการสนับสนุน" สิ่งนี้อ้างถึงอะไร โหมด NFA / DFA

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