Score:1

วิธีแทนที่สตริงใน n บรรทัดสุดท้ายของหลายไฟล์ใน linux

ธง vu

ฉันจะแทนที่สตริงเป็น '10 บรรทัดสุดท้าย' ของหลายไฟล์ได้อย่างไร

ฉันมีไฟล์ประมาณ 100 ไฟล์ที่มีนามสกุล '.txt' เหมือนกัน และฉันต้องการแทนที่สตริง 'GLN' เป็น 'LOO' ใน 10 บรรทัดสุดท้ายของแต่ละไฟล์ ฉันจะทำอย่างไร ฉันรู้วิธีทำสำหรับไฟล์เดียว แต่ไม่ใช่สำหรับหลายไฟล์ เมื่อฉันใช้คำสั่งนี้ ;

สำหรับฉันใน `หัว -3 *.txt | awk '{พิมพ์ $4}'`
     ทำ
                   sed -i 's/GLN/LOO/g' *.txt 
     เสร็จแล้ว

โดยจะแทนที่ GLN ทุกที่ที่ปรากฏในไฟล์ ไม่ใช่แค่ 10 บรรทัดสุดท้าย ได้โปรด ฉันทำอะไรผิด

Score:2
ธง hr

ไม่ชัดเจนว่าอะไร หัว -3 *.txt | awk '{พิมพ์ $4}' กลับมาที่นี่เนื่องจากคุณไม่ได้แสดงตัวอย่างไฟล์ของคุณให้เราเห็น sed -i 's/GLN/LOO/g' *.txt จะเข้ามาแทนที่ ทั้งหมดของ อินสแตนซ์ของ GLN ใน ทั้งหมด เส้นใน ทั้งหมด ไฟล์ที่ตรงกัน *.txtโดยให้ลูปดำเนินการอย่างน้อยหนึ่งครั้ง

AFAIK ไม่มีวิธีใดที่จะกล่าวถึงสิ่งสุดท้ายได้โดยตรง บรรทัดของไฟล์ใน sed - เพื่อที่จะใช้สิ่งนั้น คุณจะต้องคำนวณออฟเซ็ตจากภายนอกโดยใช้ สุขา -l และเชลล์เลขคณิตเช่น:

สำหรับ f ใน *.txt; ทำ 
  start=$(( $(wc -l <"$f") - 9 ))
  sed "$start"',$s/GLN/LOO/g' "$f"
เสร็จแล้ว

(ผมเอา -ผม ดังนั้นเอาต์พุตจึงไปที่เทอร์มินัลเพื่อทดสอบ) คุณสามารถใช้บางอย่างเช่น awk 'END{print NR-9}' "$f" แทนที่ $(( $(wc -l <"$f") - 9 )) เพื่อรับค่าชดเชยเริ่มต้นหากคุณตั้งใจที่จะใช้ awk

หรือคุณสามารถใช้ แทค เพื่อกลับไฟล์และทำการแทนที่ในไฟล์แรก เส้นแล้ว แทค ผลลัพธ์ - แม้ว่าจะทำให้การเปลี่ยนแทนที่มีความซับซ้อน

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

สำหรับ f ใน *.txt; ทำ 
  printf '%s\n' '$-9,$s/GLN/LOO/g' ',p' | พิมพ์ เอ็ด -s "$f"
เสร็จแล้ว

เมื่อคุณพอใจว่ามันทำในสิ่งที่ถูกต้องแล้ว ให้เปลี่ยน หน้า ถึง วค ถึง เขียนผลลัพธ์ไปยังไฟล์ (เทียบเท่ากับ sed's -ผม).

Score:1
ธง cn

ฉันจะใช้ฟังก์ชัน tac และ awk สำหรับงานนี้ดังนี้:

แทค file1.txt | awk 'NR<11 {gsub("GLN","LOO")};{พิมพ์}' | แทค

โพสต์คำตอบ

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