มีวิธีง่าย ๆ ที่ฉันสามารถสะท้อนไฟล์ข้ามบรรทัดแรกและบรรทัดสุดท้ายหรือไม่ ฉันมองไปที่การใส่ท่อhead
เข้าไปtail
แต่สำหรับสิ่งที่ดูเหมือนว่าฉันจะต้องรู้ว่าสายทั้งหมดตั้งแต่เริ่มแรก ฉันยังดูอยู่split
แต่ฉันไม่เห็นวิธีที่จะทำเช่นนั้น
มีวิธีง่าย ๆ ที่ฉันสามารถสะท้อนไฟล์ข้ามบรรทัดแรกและบรรทัดสุดท้ายหรือไม่ ฉันมองไปที่การใส่ท่อhead
เข้าไปtail
แต่สำหรับสิ่งที่ดูเหมือนว่าฉันจะต้องรู้ว่าสายทั้งหมดตั้งแต่เริ่มแรก ฉันยังดูอยู่split
แต่ฉันไม่เห็นวิธีที่จะทำเช่นนั้น
คำตอบ:
เพียงแค่sed
ไม่มีท่อใด ๆ :
sed '1d;$d' file.txt
บันทึก
1
หมายถึงบรรทัดแรกd
หมายถึงการลบ;
เป็นตัวคั่นสำหรับ 2 คำสั่ง$
หมายถึงบรรทัดสุดท้ายคุณไม่จำเป็นต้องรู้จำนวนบรรทัดล่วงหน้า tail
และhead
สามารถทำการชดเชยจากจุดเริ่มต้นหรือจุดสิ้นสุดของไฟล์ตามลำดับ
ไปป์นี้เริ่มต้นที่บรรทัดที่สองของไฟล์ (ข้ามบรรทัดแรก) และหยุดที่บรรทัดสุดท้าย แต่หนึ่งบรรทัด (ข้ามบรรทัดสุดท้าย) หากต้องการข้ามมากกว่าหนึ่งบรรทัดที่จุดเริ่มต้นหรือจุดสิ้นสุดให้ปรับตัวเลขตามนั้น
tail -n +2 file.txt | head -n -1
ทำมันในทางตรงกันข้ามทำงานเหมือนกันแน่นอน:
head -n -1 file.txt | tail -n +2
นี่คือวิธีที่จะทำกับ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
สำหรับสคริปต์แบบอินไลน์
ในงูหลามฉันจะทำสิ่งนี้
#!/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
สำหรับผู้ใช้ Mac:
บน Mac head -n -1
ไม่ทำงาน ให้ทำย้อนกลับไฟล์ตัดบรรทัดแรกแล้วย้อนกลับ:
tail -r file.txt | tail -n +2 | tail -r
คำอธิบาย:
tail -r
: กลับคำสั่งของบรรทัดในอินพุตของมัน
tail -n +2
: พิมพ์บรรทัดทั้งหมดที่เริ่มต้นจากบรรทัดที่สองในอินพุต
head -n -1
ลบ.txt
ไฟล์บรรทัดแรกและบรรทัดสุดท้ายของฉันออกบน Ubuntu 14.04.2LTS