Bài viết thực hiện trên:
Như bạn đã thấy, sed là một stream editor, một editor đặc biệt, có thể tìm kiếm và thay đổi một file một cách linh hoạt.
Một số câu lệnh với sed.
1. The essential command: s for substitutionCâu lệnh s sẽ thay thế tất cả các giá trị phù hợp thành một giá trị mới.
Ví dụ, để chuyển 'day' trong file "old" thành 'night' và ghi vào một file mới "new".
Tuy nhiên, bạn được khuyên nên đặt ' ' vào câu lệnh như sau:
Nếu trong câu lệnh có các kí tự đặc biệt, bạn cần đặt trước chúng kí tự sau: '\'
Từ các ví dụ trên, chúng ta có thể rút ra được syntax của câu lệnh như sau:
sed '/ /usr/local/bin / /common/bin/
theo đúng syntax do '/' là kí tự đặc biệt. Khi đó bạn cần đặt '\' trước mỗi '/' như sau:
Ví dụ:
123, 123 và 456
Chú ý: sed không suppot cho kí tự '+'. Để thực hiện pattern với '+', bạn cần thêm option -r:
4.1. Xóa tất cả các dòng trắng trong một file:
Sed còn rất nhiều các trường hợp khác, khi nào cần dùng thì tìm hiểu tiếp :D
Tham khảo thêm tại:
thanhnt@Thanhnt:~$ lsb_release -rSed là gì?
Release: 12.04
NAMESed là viết tắt của stream editor.
sed - stream editor for filtering and transforming text
Như bạn đã thấy, sed là một stream editor, một editor đặc biệt, có thể tìm kiếm và thay đổi một file một cách linh hoạt.
Một số câu lệnh với sed.
1. The essential command: s for substitutionCâu lệnh s sẽ thay thế tất cả các giá trị phù hợp thành một giá trị mới.
Ví dụ, để chuyển 'day' trong file "old" thành 'night' và ghi vào một file mới "new".
Hoặc theo một cách khác:sed s/day/night/ <old >new
Một ví dụ:sed s/day/night/ old >new
thanhnt@Thanhnt:~$ echo sunday | sed s/day/night/Chú ý: bạn không cần đặt " " vào 'day' hay 'night' vì chúng không cần thiết.
sunnight
Tuy nhiên, bạn được khuyên nên đặt ' ' vào câu lệnh như sau:
thanhnt@Thanhnt:~$ echo sunday | sed 's/day/night/'Điều này sẽ hữu ích khi trong câu lệnh của bạn có các metadata characters.
sunday
Nếu trong câu lệnh có các kí tự đặc biệt, bạn cần đặt trước chúng kí tự sau: '\'
Từ các ví dụ trên, chúng ta có thể rút ra được syntax của câu lệnh như sau:
sed 's/pattern/replace/' filename
2.The slash as a delimiter
Nếu bạn muốn chuyển /usr/local/bin thành /common/bin, bạn sẽ không thể dùng:sed '/ /usr/local/bin / /common/bin/
theo đúng syntax do '/' là kí tự đặc biệt. Khi đó bạn cần đặt '\' trước mỗi '/' như sau:
sed '/ \/usr\/local\/bin / \/common\/bin/hoặc sử dụng '|':
sed '|/usr/local/bin |/common/bin|
3. Using & as the matched string
Đôi khi bạn muốn lặp lại một số lần pattern, khi ấy bạn có thể dùng '&' thay thế cho matched string.Ví dụ:
thanhnt@Thanhnt:~$ echo "123 và 456" | sed 's/123/&&/'thanhnt@Thanhnt:~$ echo "123 và 456" | sed 's/[0-9]*/&, &/'
123123 và 456
thanhnt@Thanhnt:~$ echo "123 và 456" | sed 's/123/& &/'
123 123 và 456
thanhnt@Thanhnt:~$ echo "123 và 456" | sed 's/123/&, &/'
123, 123 và 456
123, 123 và 456
Chú ý: sed không suppot cho kí tự '+'. Để thực hiện pattern với '+', bạn cần thêm option -r:
thanhnt@Thanhnt:~$ echo "123 và 456" | sed 's/[0-9]+/&, &/'4. Một số câu lệnh hữu ích khác:
123 và 456
thanhnt@Thanhnt:~$ echo "123 và 456" | sed -r 's/[0-9]+/&, &/'
123, 123 và 456
4.1. Xóa tất cả các dòng trắng trong một file:
$ sed '/^$/d' filename > output.txt
4.2. Xóa tất cả những dòng bắt đầu với một kí tự xác định. Ví dụ dấu # (trường hợp này rất hữu ích khi làm gọn các file config :)) )
$ sed 's/#.*//' filename > output.txt
Sed còn rất nhiều các trường hợp khác, khi nào cần dùng thì tìm hiểu tiếp :D
Tham khảo thêm tại:
http://www.grymoire.com/Unix/Sed.html#uh-0
Không có nhận xét nào:
Đăng nhận xét