Score:0

วิธีเพิ่มเครื่องหมายคำพูดให้กับองค์ประกอบที่สองของสตริงหลังเครื่องหมายจุลภาคในไฟล์ข้อความ bash

ธง bt

เนื้อหาไฟล์:

1234,/สินค้า/หมายเลข 234567
2456,/สินค้า/หมายเลข 456789

และอื่นๆ...อีกหลายบรรทัด

ต้องการผลลัพธ์ดังนี้:

1234,"/สินค้า/หมายเลข 234567"
2456,"/สินค้า/หมายเลข 456789"
David avatar
cn flag
จากนั้นลองสร้างโค้ดด้วยตัวเองแล้วโพสต์ หากมีข้อผิดพลาด อาจมีคนพยายามช่วยเหลือคุณ ไม่มีใครจะทำเพื่อคุณ
pLumo avatar
in flag
คุณต้องการแก้ปัญหาอะไร โปรดตรวจสอบ: https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem
ru flag
คุณต้องการแสดงเนื้อหาของไฟล์นั้นด้วยเครื่องหมายคำพูดที่เพิ่มเข้ามา หรือคุณต้องการแทนที่เนื้อหาเหล่านั้นด้วยเนื้อหาใหม่ (ด้วยเครื่องหมายคำพูด) ในไฟล์นั้น
mchid avatar
bo flag
คุณต้องการ `1234,"/Product/number 234567" 2456,"/Product/number 456789"` แทนสองบรรทัดหรือไม่ ไม่ว่าในกรณีใด คำตอบของฉันด้านล่างจะใช้ได้
Score:3
ธง hr

สำหรับข้อมูลที่มีโครงสร้าง (กล่าวคือสามารถอธิบายได้ในรูปของ บันทึก ประกอบด้วยตัวคั่น เขตข้อมูล) ฉันขอแนะนำเครื่องมืออย่าง awk:

awk -F, 'BEGIN{OFS=FS} {$2 = "\"" $2 "\""} {พิมพ์}' ไฟล์

หรือ (กระชับมากขึ้น - ใช้การดำเนินการพิมพ์เริ่มต้น)

awk -F, 'BEGIN{OFS=FS} {$2 = "\"" $2 "\""} 1' ไฟล์

ถ้าคุณ จริงๆ ต้องทำโดยกำเนิดใน bash แล้ว

ในขณะที่ IFS= อ่าน -r a b; ทำ printf '%s,"%s"\n' "$a" "$b"; เสร็จแล้ว < ไฟล์

(แต่อย่า-ดู เหตุใดการใช้เชลล์ลูปเพื่อประมวลผลข้อความจึงถือเป็นการปฏิบัติที่ไม่ดี).

Score:2
ธง bo
คุณสามารถทำได้โดยใช้ perl regex และคุณสามารถทดแทนได้เหมือนกับการใช้ เสด.

สมมติว่าคุณจะมีเสมอ /หมายเลขผลิตภัณฑ์ ตามด้วยตัวเลขกลุ่มเดียว คุณสามารถใช้คำสั่งต่อไปนี้เพื่อพิมพ์การเปลี่ยนแปลง:

perl -pe 's|/Product/number (\d+)|"$&"|g' ชื่อไฟล์

หากคุณพอใจกับเอาต์พุต คุณสามารถใช้คำสั่งต่อไปนี้เพื่อแก้ไขไฟล์:

perl -pi -e 's|/Product/number (\d+)|"$&"|g' ชื่อไฟล์
  • (\d+) จับคู่กลุ่มใด ๆ ของตัวเลขตั้งแต่หนึ่งหลักขึ้นไป
  • $& backreferences สตริงที่ตรงกันทั้งหมด คล้ายกับการใช้ & ใน เสด

นอกจากนี้ฉันใช้ | เป็นตัวคั่นแทน / เนื่องจากสตริงมีเครื่องหมายทับ


หรือคุณสามารถใช้ เสด โดยใช้คำสั่งต่อไปนี้ในการพิมพ์:
sed -E 's|/ผลิตภัณฑ์/หมายเลข [[:หลัก:]]+|"&"|g' ชื่อไฟล์

หรือคำสั่งต่อไปนี้เพื่อแก้ไขการเปลี่ยนแปลงในไฟล์:

sed -Ei 's|/Product/number [[:หลัก:]]+|"&"|g' ชื่อไฟล์

คำสั่งนี้ใช้ตัวเลือกนิพจน์ทั่วไปเพิ่มเติม -E

  • [[:หลัก:]]+ จับคู่กลุ่มของตัวเลขตั้งแต่หนึ่งหลักขึ้นไป
  • & backreferences สตริงที่ตรงกันทั้งหมด
Score:0
ธง cn

หากข้อมูลของคุณเรียบง่ายอย่างที่คุณแสดง สิ่งที่คุณต้องทำก็คือเพิ่มเครื่องหมายอัญประกาศคู่หลังเครื่องหมายจุลภาคตัวแรกและหลังอักขระตัวสุดท้ายของทุกบรรทัด ถ้าเป็นเช่นนั้น ให้ทำดังนี้

$sed 's/,/,"/; s/$/"/' ไฟล์
1234,"/สินค้า/หมายเลข 234567"
2456,"/สินค้า/หมายเลข 456789"

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา