พิมพ์เนื้อหาไฟล์โดยไม่มีบรรทัดแรกและบรรทัดสุดท้าย


54

มีวิธีง่าย ๆ ที่ฉันสามารถสะท้อนไฟล์ข้ามบรรทัดแรกและบรรทัดสุดท้ายหรือไม่ ฉันมองไปที่การใส่ท่อheadเข้าไปtailแต่สำหรับสิ่งที่ดูเหมือนว่าฉันจะต้องรู้ว่าสายทั้งหมดตั้งแต่เริ่มแรก ฉันยังดูอยู่splitแต่ฉันไม่เห็นวิธีที่จะทำเช่นนั้น

คำตอบ:


97

เพียงแค่sedไม่มีท่อใด ๆ :

sed '1d;$d' file.txt

บันทึก

  • 1หมายถึงบรรทัดแรก
  • dหมายถึงการลบ
  • ; เป็นตัวคั่นสำหรับ 2 คำสั่ง
  • $หมายถึงบรรทัดสุดท้าย

36

คุณไม่จำเป็นต้องรู้จำนวนบรรทัดล่วงหน้า tailและheadสามารถทำการชดเชยจากจุดเริ่มต้นหรือจุดสิ้นสุดของไฟล์ตามลำดับ

ไปป์นี้เริ่มต้นที่บรรทัดที่สองของไฟล์ (ข้ามบรรทัดแรก) และหยุดที่บรรทัดสุดท้าย แต่หนึ่งบรรทัด (ข้ามบรรทัดสุดท้าย) หากต้องการข้ามมากกว่าหนึ่งบรรทัดที่จุดเริ่มต้นหรือจุดสิ้นสุดให้ปรับตัวเลขตามนั้น

tail -n +2 file.txt | head -n -1

ทำมันในทางตรงกันข้ามทำงานเหมือนกันแน่นอน:

head -n -1 file.txt | tail -n +2

ฉันไม่รู้ว่าทำไม แต่head -n -1ลบ.txtไฟล์บรรทัดแรกและบรรทัดสุดท้ายของฉันออกบน Ubuntu 14.04.2LTS
Sopalajo de Arrierez

9

นี่คือวิธีที่จะทำกับawk:

awk 'NR>2 {print t} {t=$0}'

อีกวิธีหนึ่งสำหรับsed:

sed '1d;x' file.txt

xเป็นsedคำสั่งขั้นสูงมันสลับบรรทัดปัจจุบันกับบรรทัดก่อนหน้า: ปัจจุบันไปที่บัฟเฟอร์และก่อนหน้านี้ไปที่หน้าจอและอื่น ๆ ในขณะที่sedประมวลผลสตรีมทีละบรรทัด (นี่คือสาเหตุที่บรรทัดแรกจะว่างเปล่า)

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

แนวคิดเดียวกันในperl:

perl -ne 'print $t if $.>2 ; $t=$_' file.txt

$.หมายถึงหมายเลขบรรทัดและ$_ สำหรับบรรทัดปัจจุบัน
perl -nเป็นทางลัดสำหรับwhile(<..>) {..}โครงสร้างและ-eสำหรับสคริปต์แบบอินไลน์


2

ในงูหลามฉันจะทำสิ่งนี้

#!/usr/bin/python3
import re
import sys
file = sys.argv[1]
with open(file, 'r') as f:
    L = []
    for line in f:
        line = re.sub(r'\n', r'', line)
        L.append(line)
    print('\n'.join(L[1:-1]))

script.pyวางโค้ดข้างต้นลงในแฟ้มและชื่อเป็น เรียกใช้สคริปต์กับไฟล์ที่คุณต้องการตรวจสอบ

python3 script.py /path/to/the/file

ตัวอย่าง:

$ cat file
foo
apple
banana
bar
$ python3 script.py file
apple
banana

2

สำหรับผู้ใช้ Mac:

บน Mac head -n -1ไม่ทำงาน ให้ทำย้อนกลับไฟล์ตัดบรรทัดแรกแล้วย้อนกลับ:

tail -r file.txt | tail -n +2 | tail -r

คำอธิบาย:

  1. tail -r : กลับคำสั่งของบรรทัดในอินพุตของมัน

  2. tail -n +2 : พิมพ์บรรทัดทั้งหมดที่เริ่มต้นจากบรรทัดที่สองในอินพุต

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