Sed -i '1d' làm gì?


28

Tôi hiểu đó sedlà một lệnh để thao tác tập tin văn bản.

Từ Google của tôi, có vẻ như -ithực hiện thao tác trên chính tệp, điều này có đúng không?

Thế còn '1d'?

Câu trả lời:


43

Trong sed:

  • -i tùy chọn sẽ chỉnh sửa tập tin đầu vào tại chỗ

  • '1d' sẽ xóa dòng đầu tiên của tệp đầu vào

Thí dụ:

% cat file.txt 
foo
bar

% sed -i '1d' file.txt 

% cat file.txt        
bar

Lưu ý rằng, hầu hết thời gian là một ý tưởng tốt để sao lưu trong khi sử dụng -itùy chọn để bạn có tệp gốc được sao lưu trong trường hợp có bất kỳ thay đổi bất ngờ nào.

Ví dụ: nếu bạn làm:

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

tệp gốc sẽ được giữ nguyên file.txt.origvà tệp sửa đổi sẽ là file.txt.


4
Bạn cũng có thể thực hiện "chạy khô" mà không cần -ixem điều gì xảy ra trước, sau đó sử dụng -iđể thực sự thay đổi tệp.
Baard Kopperud

15

1. a)

sed '1d' file.txt

In nội dung của file.txt; Không bao gồm dòng đầu tiên; đến đầu ra tiêu chuẩn.


2. a)

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

In nội dung của file.txt; Không bao gồm dòng đầu tiên; trở lại vào file.txt; ghi đè lên bản gốc.


2. b)

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

Tạo một bản sao lưu của bản gốc (dưới dạng file.txt.back), trước khi thực hiện các thay đổi. Ngoại trừ FreeBSD sed, hậu tố (ở đây .back) phải được gắn vào -itùy chọn (trong cùng một đối số, không có khoảng cách giữa -i.back).


3. a)

sed '2d' file.txt

In nội dung của file.txt; Không bao gồm dòng thứ hai; đến đầu ra tiêu chuẩn.
(Chỉ định bất kỳ số nào sẽ loại bỏ dòng tương ứng).

Cũng tương thích với -icờ.


3. b)

sed '1!d' file.txt

In nội dung của file.txt; trừ tất cả nhưng dòng đầu tiên; đến đầu ra tiêu chuẩn.
(Nói cách khác; chỉ dòng đầu tiên được in).

Cũng tương thích với -icờ.


3. c)

sed '$d' file.txt

In nội dung của file.txt; Không bao gồm dòng cuối cùng; đến đầu ra tiêu chuẩn.

Cũng tương thích với -icờ.


FYI: Phiên bản BSD (tức là tiêu chuẩn macOS de facto) thường không hợp tác trừ khi bạn tạo bản sao lưu (2. b) hoặc sử dụng phương pháp bỏ qua sao lưu (2. c). Phiên bản GNU sẽ không nhắc bạn về điều này. Nó sẽ chỉnh sửa triệt để và ghi đè lên các tệp hiện có mà không do dự.
lên tiếng

4

Trong sed -hcó:

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

và 'thực hiện thao tác trên chính tệp.' tuyệt đối đó là

mannói: 'Sed là một biên tập viên dòng. Trình chỉnh sửa luồng được sử dụng để thực hiện các chuyển đổi văn bản cơ bản trên luồng đầu vào (tệp hoặc đầu vào từ đường ống). '

như câu hỏi của bạn,

sed -i '1d' file_name

có nghĩa là: xóa dòng đầu tiên trong tệp "file_name"tại chỗ và sao lưu vào tệp. (giống như chỉnh sửa tập tin và xóa dòng đầu tiên trực tiếp.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.