ไม่ชัดเจนว่าอะไร หัว -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 -ผม
).