sed -i '1d' ทำอะไร


28

ฉันเข้าใจว่าsedเป็นคำสั่งในการจัดการไฟล์ข้อความ

จาก Googling ของฉันดูเหมือนว่าจะ-iทำการดำเนินการกับไฟล์เองถูกต้องหรือไม่

เกี่ยวกับ'1d'อะไร

คำตอบ:


43

ในsed:

  • -i ตัวเลือกจะแก้ไขไฟล์อินพุตในสถานที่

  • '1d' จะลบบรรทัดแรกของไฟล์อินพุต

ตัวอย่าง:

% cat file.txt 
foo
bar

% sed -i '1d' file.txt 

% cat file.txt        
bar

โปรดทราบว่าส่วนใหญ่คุณควรสำรองข้อมูลโดยใช้-iตัวเลือกเพื่อให้คุณสำรองไฟล์ต้นฉบับในกรณีที่มีการเปลี่ยนแปลงที่ไม่คาดคิด

ตัวอย่างเช่นถ้าคุณ:

sed -i.orig '1d' file.txt 

ไฟล์ต้นฉบับจะถูกเก็บไว้เป็นและแฟ้มที่แก้ไขจะเป็นfile.txt.origfile.txt


4
คุณยังสามารถทำ "dry run" โดยไม่ต้อง-iดูว่าเกิดอะไรขึ้นก่อนจากนั้นใช้-iเพื่อเปลี่ยนไฟล์จริง
Baard Kopperud

15

1. a)

sed '1d' file.txt

พิมพ์เนื้อหาของfile.txt; ไม่รวมบรรทัดแรก ไปยังเอาต์พุตมาตรฐาน


2. a)

sed -i    '1d' file.txt # GNU, NetBSD, OpenBSD
sed -i '' '1d' file.txt # FreeBSD, macOS

พิมพ์เนื้อหาของfile.txt; ไม่รวมบรรทัดแรก กลับเข้ามาfile.txt; เขียนทับต้นฉบับ


2. b)

sed -i.back '1d' file.txt

สร้างสำเนาสำรองของต้นฉบับ (เป็นfile.txt.back) ก่อนทำการเปลี่ยนแปลง ยกเว้น FreeBSD sedส่วนต่อท้าย (ที่นี่.back) จะต้องแนบกับ-iตัวเลือก (ในอาร์กิวเมนต์เดียวกันไม่มีช่องว่างระหว่าง-iและ.back)


3. a)

sed '2d' file.txt

พิมพ์เนื้อหาของfile.txt; ไม่รวมบรรทัดที่สอง ไปยังเอาต์พุตมาตรฐาน
(การระบุหมายเลขใด ๆ จะลบบรรทัดที่เกี่ยวข้อง)

ยังเข้ากันได้กับ-iธง


3. b)

sed '1!d' file.txt

พิมพ์เนื้อหาของfile.txt; ยกเว้นแต่บรรทัดแรก; ไปยังเอาต์พุตมาตรฐาน
(กล่าวอีกนัยหนึ่งเฉพาะพิมพ์บรรทัดแรกเท่านั้น )

ยังเข้ากันได้กับ-iธง


3. c)

sed '$d' file.txt

พิมพ์เนื้อหาของfile.txt; ไม่รวมบรรทัดสุดท้าย ไปยังเอาต์พุตมาตรฐาน

ยังเข้ากันได้กับ-iธง


FYI: รุ่น BSD (เช่นมาตรฐาน MacOS de พฤตินัย) โดยทั่วไปจะไม่ให้ความร่วมมือเว้นแต่คุณจะสร้างการสำรองข้อมูล (2. b) หรือใช้วิธีบายพาสการสำรองข้อมูล (2. c) รุ่น GNU จะไม่แสดงข้อความแจ้งให้คุณทราบ มันจะแก้ไขอย่างทำลายล้างและเขียนทับไฟล์ที่มีอยู่โดยไม่ลังเล
เสียง

4

ในsed -hมี:

  -i[SUFFIX], --in-place[=SUFFIX]
             edit files in place (makes backup if SUFFIX supplied)

และ 'ทำการดำเนินการกับไฟล์เอง' แน่นอนมันคือ

และmanกล่าวว่า: 'Sed เป็นเครื่องมือแก้ไขสตรีม ตัวแก้ไขสตรีมใช้เพื่อทำการแปลงข้อความพื้นฐานในอินพุตสตรีม (ไฟล์หรืออินพุตจากไพพ์ไลน์) '

ตามคำถามของคุณ

sed -i '1d' file_name

หมายถึง: ลบบรรทัดแรกในไฟล์"file_name"ที่สถานที่และสำรองข้อมูลเป็นไฟล์ (เช่นเดียวกับการแก้ไขไฟล์และลบบรรทัดแรกโดยตรง)

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