Cơ Bản
Chạy sed
sed 's/old/new/' file.txt # substitute first match per line sed 's/old/new/g' file.txt # substitute all matches per line sed -n '5p' file.txt # print only line 5 sed '3d' file.txt # delete line 3 echo "hello" | sed 's/hello/hi/' # pipe input
Cờ Dòng Lệnh
-nTắt in tự động; chỉ in với p
-e 'cmd'Thực thi lệnh sed (kết hợp nhiều với -e)
-f script.sedĐọc lệnh từ file
-i[suffix]Sửa file tại chỗ (hậu tố backup tùy chọn)
-E / -rDùng biểu thức chính quy mở rộng
Thay Thế
Cú Pháp Thay Thế
sed 's/foo/bar/' f # first occurrence per line sed 's/foo/bar/g' f # all occurrences sed 's/foo/bar/3' f # 3rd occurrence only sed 's/foo/bar/gi' f # all, case-insensitive sed 's|/usr/bin|/opt/bin|g' f # alternate delimiter
Cờ Thay Thế
gThay thế tất cả lần xuất hiện trong dòng
N (số)Chỉ thay thế lần xuất hiện thứ N
pIn dòng nếu thay thế được thực hiện
w fileGhi các dòng đã thay thế vào file
i / IKhớp không phân biệt hoa/thường (GNU)
Địa Chỉ
Ví Dụ Địa Chỉ
sed '3s/a/b/' f # only on line 3 sed '2,5s/a/b/' f # lines 2 through 5 sed '/^#/d' f # delete lines starting with # sed '/start/,/end/d' f # delete range between patterns sed '1~2d' f # delete odd-numbered lines (GNU)
Kiểu Địa Chỉ
NSố dòng N
$Dòng cuối
N,MDải dòng từ N đến M
/regex/Các dòng khớp regex
/regex1/,/regex2/Dải từ khớp đầu đến khớp thứ hai
N~stepBắt đầu từ N, mỗi step dòng (GNU)
addr!Phủ định — áp dụng cho dòng không khớp
Xóa & In
Lệnh Xóa & In
sed '5d' f # delete line 5 sed '/^$/d' f # delete blank lines sed -n '10,20p' f # print lines 10–20 sed -n '/error/p' f # print lines matching pattern sed '/debug/!d' f # keep only matching lines
Tham Chiếu Lệnh
dXóa pattern space, bắt đầu chu kỳ tiếp theo
DXóa đến ký tự xuống dòng đầu trong pattern space
pIn pattern space
PIn đến ký tự xuống dòng đầu trong pattern space
qThoát sau khi in pattern space hiện tại
QThoát không in (GNU)
Chèn & Thêm
Chèn, Thêm, Thay Thế
sed '3i\inserted line' f # insert before line 3 sed '3a\appended line' f # append after line 3 sed '3c\replaced line' f # replace line 3 sed '/marker/a\new line' f # append after pattern match
Lệnh
i\textChèn text trước dòng hiện tại
a\textThêm text sau dòng hiện tại
c\textThay thế dòng hiện tại bằng text
r fileĐọc và thêm nội dung file
R fileĐọc và thêm một dòng từ file (GNU)
w fileGhi pattern space vào file
Hold Space
Lệnh Hold Space
hSao chép pattern space vào hold space
HThêm pattern space vào hold space
gSao chép hold space vào pattern space
GThêm hold space vào pattern space
xHoán đổi pattern và hold space
Ví Dụ Hold Space
sed -n '1!G;h;$p' f # reverse lines (tac) sed '/^$/{ x; s/\n//; x; }' f # collapse hold on blank sed -n 'H;${x;s/\n/ /g;p;}' f # join all lines with space
Nhiều Lệnh
Nối Chuỗi Lệnh
sed -e 's/foo/bar/g' -e 's/baz/qux/g' f sed 's/foo/bar/g; s/baz/qux/g' f sed '/header/{ s/old/new/; s/foo/bar/; }' f sed -f commands.sed input.txt
Nhóm & Phân Nhánh
{ cmd1; cmd2; }Nhóm lệnh cho cùng địa chỉ
:labelĐịnh nghĩa nhãn phân nhánh
b labelPhân nhánh (nhảy) đến nhãn
t labelPhân nhánh nếu s/// cuối thành công
T labelPhân nhánh nếu s/// cuối thất bại (GNU)
Sửa Tại Chỗ
Ví Dụ Sửa Tại Chỗ
sed -i 's/old/new/g' file.txt # edit in place (GNU) sed -i.bak 's/old/new/g' file.txt # backup as file.txt.bak sed -i '' 's/old/new/g' file.txt # macOS in-place (no backup) sed -i '/^#/d' config.txt # remove comments in place
Ghi Chú Nền Tảng
GNU sed -iHậu tố tùy chọn; -i một mình sửa không backup
BSD/macOS sed -iCần đối số hậu tố; dùng -i '' để không backup
-i.bakTạo file backup với phần mở rộng .bak
Nhiều filesed -i 's/a/b/g' *.txt sửa tất cả file khớp
Regex
Regex trong sed
.Bất kỳ ký tự đơn nào
*Không hoặc nhiều ký tự trước
\+Một hoặc nhiều (BRE) — + trong ERE
\?Không hoặc một (BRE) — ? trong ERE
^Đầu dòng
$Cuối dòng
[abc]Lớp ký tự
\( \)Nhóm bắt (BRE) — () trong ERE
\1, \2Tham chiếu ngược đến nhóm bắt
&Toàn bộ chuỗi khớp (trong thay thế)
Ví Dụ Regex
sed 's/[0-9]\+/NUM/g' f # replace numbers sed -E 's/(foo)(bar)/\2\1/g' f # swap groups (ERE) sed 's/.*/(&)/' f # wrap line in parens sed 's/[ \t]*$//' f # strip trailing whitespace
Mẫu Phổ Biến
One-Liner
sed -n '1p' f # first line (head -1) sed '$!d' f # last line (tail -1) sed '/^$/d' f # remove blank lines sed 's/^[ \t]*//' f # strip leading whitespace sed '=' f | sed 'N;s/\n/\t/' f # number lines
Công Thức
Giãn đôi dòngsed G — thêm dòng trắng sau mỗi dòng
Xóa thẻ HTMLsed 's/<[^>]*>//g'
Trích xuất emailsed -nE 's/.*([a-z]+@[a-z.]+).*/\1/p'
Thêm comment dòngsed 's/^/# /' — thêm # vào đầu mỗi dòng
Xóa dòng trắng cuối filesed -e :a -e '/^\n*$/{$d;N;ba' -e '}'
Thay thế dòng thứ Nsed 'Nc\new text' — thay thế dòng N