แทนที่ช่องว่างสีขาวทั้งหมดด้วยเครื่องหมายจุลภาคในไฟล์ข้อความ


10

ฉันต้องการแทนที่ช่องว่างสีขาวทั้งหมดภายในข้อความด้วยเครื่องหมายจุลภาค ฉันใช้บรรทัดนี้อยู่ในขณะนี้ แต่ใช้งานไม่ได้: ฉันได้รับเป็นไฟล์ข้อความที่เหมือนกันกับไฟล์ต้นฉบับ:

sed 's/[:blank:]+/,/g' orig.txt > modified.txt

ขอบคุณ


sed 's / [[: blank:]] \ + /, / g'
mug896

@ mug896 ทำงานให้ฉันบน Ubuntu 18.04 ฉันต้องการวงเล็บเหลี่ยมสองอันและ \ before the +
dmontaner

คำตอบ:


15

ด้วยsed:

sed -e 's/\s\+/,/g' orig.txt > modified.txt

หรือด้วยperl:

perl -pne 's/\s+/,/g' < orig.txt > modified.txt

แก้ไข:หากต้องการยกเว้นการขึ้นบรรทัดใหม่ใน Perl คุณสามารถใช้เครื่องหมายลบ's/[^\S\n]+/,/g'หรือจับคู่กับอักขระเว้นวรรคที่คุณ's/[ \t\r\f]+/,/g'ต้องการ


ขอบคุณอย่างไรก็ตามยังมีปัญหา: ฉันไม่ต้องการแทนที่ "บรรทัดถัดไป \ n" ด้วยเครื่องหมายจุลภาคและคำสั่งด้วย perl กำลังทำอยู่ เธอสั่งให้คุณเขียนมันยังไม่ทำงาน
aneuryzm

ขออภัยคุณต้องหลบหนี+โอเปอเรเตอร์ฉันเพิ่งอัพเดตคำตอบของฉัน ขึ้นบรรทัดใหม่เป็น whitepsace ใน perl ดังนั้นคุณจะต้องทำ class whitepsace ด้วยตนเองหากคุณไม่ต้องการรวมไว้ ฉันได้เพิ่มวิธีแก้ไขปัญหาสองข้อสำหรับวิธีนี้ในฐานะที่เป็น wel
Caleb

13

การใช้tr:

tr -s '[:blank:]' ',' <file

สิ่งนี้จะแทนที่ช่องว่างในแนวนอนด้วยเครื่องหมายจุลภาค ช่องว่างที่ทำซ้ำจะถูกแทนที่ด้วยเครื่องหมายจุลภาคเดียวเท่านั้น


-1
awk '{print $1","}' Servers | tr -d '[\n]' | xargs echo 

นี่ชื่อไฟล์คือเซิร์ฟเวอร์ .. มันมีเนื้อหาด้านล่าง ..

Server1
Server2
Server3

ถ้าเราใช้คำสั่งข้างต้นเราจะได้ผลลัพธ์ด้านล่าง ..

Server1,Server2,Server3,


[mohramak@oc3246038448 Desktop]$ cat Servers
Server1
Server2
Server3
[mohramak@oc3246038448 Desktop]$ awk '{print $1","}' Servers | tr -d '[\n]' | xargs echo 
Server1,Server2,Server3,
[mohramak@oc3246038448 Desktop]$ 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.