ลบเครื่องหมายจุลภาคต่อท้ายในบรรทัด


10

ฉันจะลบชุดของเครื่องหมายจุลภาคต่อท้ายใน bash ได้อย่างไร:

a,b,c,d,,,,
1,2,3,,,,

ผลลัพธ์ที่ต้องการ:

a,b,c,d
1,2,3

พยายามทำสิ่งนี้:

 grep "5628" test.csv | sed 's/,*$//g'

แต่มันไม่ทำงาน ไฟล์มาจากเครื่องที่ใช้ Windows


2
คุณแน่ใจหรือว่ามันไม่ทำงาน? คุณใช้คำสั่งเต็มรูปแบบอะไร
cuonglm

บวก. มันไม่ได้
2980702

คุณสามารถให้คำสั่งที่แน่นอนของคุณโปรด (คนsedที่คุณได้โดยไม่ต้องแสดงชื่อไฟล์ทำหน้าที่เป็นตัวกรองและไม่ประมวลผลไฟล์ที่อยู่ในสถานที่ )
roaima

grep "5628" test.csv | sed 's /, * $ // g'
2980702

2
หากคุณต้องการใช้ไฟล์ใน * nix และคุณไม่จำเป็นต้องคัดลอกกลับไปเป็น Windows มันอาจจะง่ายขึ้นในระยะยาวในการแปลงการสิ้นสุดบรรทัดจาก CR / LF เป็น NL ด้วยdos2unixหรืออะไรทำนองนั้น .
G-Man กล่าวว่า 'Reinstate Monica'

คำตอบ:


13

คำสั่งที่คุณให้ไว้อีกครั้ง:

grep "5628" test.csv | sed 's/,*$//g'

นี่จะเป็นบรรทัดผลลัพธ์ที่ตรงกับ '5628' เมื่อลบคอมม่าทั้งหมด test.csvมันจะไม่ปรับปรุงแฟ้ม

อย่างไรก็ตามคุณระบุว่าไฟล์นั้นมาจากเครื่อง Windows ดังนั้นการสิ้นสุดบรรทัดคือ CR / NL แทนที่จะเป็นแค่ NL ผลลัพธ์คือมี CR ซ่อนอยู่ที่ท้ายบรรทัดและคุณต้องการบรรทัดคำสั่งนี้แทน:

grep "5628" test.csv | sed 's/,*\r*$//'

จริงๆแล้วคุณสามารถใช้คำสั่งนี้เพียงคำสั่งเดียว:

sed -n '/5628/s/,*\r*$//p' test.csv

ฉันไม่ได้พยายามอัพเดท เพียงแค่ต้องการผลลัพธ์โดยไม่ต้องใช้เครื่องหมายจุลภาค
user2980702

มันใช้งานได้ดีขอบคุณมาก ดังนั้นเรากำลังค้นหาจุลภาคหลายตัว (, *) ก่อนที่ carriage return ที่ท้ายไฟล์ (\ r * $) ฉันถูกไหม ?
user2980702

\r*ช่วยให้ศูนย์หรือมากกว่าตัวอักษร CR (ดังนั้นจึงจะยังคงทำงานร่วมกับ Unix / Linux มาไฟล์) ฉันต้องการใช้\r?เพื่อระบุ CR ตัวเลือกเดียว แต่ฉันจำไม่ได้ว่าการตั้งค่าสถานะsedเพื่อบอกให้ใช้ EREs จากส่วนหัวของฉัน ฉันคิดว่ามันเป็น-rแต่ยังไม่ทดลองที่นี่ ,*เป็นของคุณและตรงกับศูนย์หรือเพิ่มเติมจุลภาค
roaima

gไม่จำเป็นต้องใช้ในกรณีนี้เธอเป็นเพียง 1 ในตอนท้ายระบุโดย$
NeronLeVelu

2
sed -n '/5628/ s/,*\r*$//p' test.csv

(ไม่ใช่ OP ที่ขอให้ลบ trauma coma เท่านั้น) ซึ่งจะเป็นการหลีกเลี่ยงกระบวนการ piping โดยทำการกรองโดยตรงและแปลง

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