Thay thế và cắt ký tự sử dụng lệnh sed và regex trong linux, unix

Chào mọi người, lâu lắm mới quay lại viết bài, sau một thời gian sử dụng linux và nghịch ngợm vài thứ, mình thấy lệnh sed khá mạnh trong lập trình unix, linux. Có thể lệnh sed không còn lạ lẫm với những bạn sử dụng unix hay linux, tuy nhiên nhiều bạn chưa biết về lệnh này, hoặc có thể sẽ quên. Cá nhân mình hay quên nên cứ note lên đây để lúc nào cần xem lại cho tiện. Hiu hiu.

Lệnh sed đi kèm với mã regex cực kỳ mạnh, hữu ích khi xử lý text. Mã regex là gì? regex viết tắt là “Regular expressions”, tuy nhiên nó khá trừu tượng, theo  mình hiểu nôm la nó là một số mã đặc biệt mà thông thường ta ít khi dùng tới vì nó dùng cho xử lý tầng thấp, do vậy xử lý với regex sẽ rất nhanh và hiệu quả, tuy nhiên nó thâm thúy nên dùng được nó thành thạo cũng không hề đơn giản.

Loằng ngoằng quá, đi vào vấn đề chính.

Cắt hay loại bỏ một ký tự nào đó dùng lệnh sed:

ví dụ mình có chuỗi ký tự sau: Hi buddy, I’m laogia

để loại bỏ I’m đi mình dùng: sed “s/I’m//”

kết quả thu được sau lệnh sed sẽ là: Hi buddy,  laogia

Về bản chất của lệnh sed này là nó sẽ thay thế string (s/) “I’m” bằng đoạn string rỗng.

Cú pháp sẽ là: sed “s/string cần thay thế/string để thay thế/g” . Ký tự g kia có hoặc không, ý nghĩa của nó là: thực hiện lệnh cho đến hết, còn nếu không có “g” thì chỉ chạy một lần thôi:

Tương tự ví dụ trên: Hi buddy, I’m laogia I’m

Nếu không có “g” thì kết quả như này nè: Hi buddy,  laogia I’m

Nếu có “g” thì kết quả sẽ xóa toàn bộ string “I’m” đi: Hi buddy,  laogia

Lợi hại phết nhờ.

Thằng sed này còn dùng được một số mã regex nữa cơ:

ví  dụ: ký tự $: thằng này là ký tự kết thúc nè

ký tự ^: thằng này là ký tự bắt đầu của dòng nè

ký tự .*: thằng này là tương đương tất cả ký tự

….. còn nhiều lắm :))

mình thử dùng vài cái cho các bạn xem nhé:

Lấy luôn ví dụ : Hi buddy, I’m laogia đi

  • dùng sed “s/^Hi/chao/”   ->>chao buddy, I’m laogia
  • dùng sed “s/,.*\s//”  ->> Hi buddylaogia   với thằng \s ở đây được hiểu là ký tự space (dấu cách đó)

Còn nữa, có thể thay thế dấu “/” trên bằng “@” hoặc “:” tùy thuộc từng trường hợp.

Đây là vài thứ đơn giản mình biết vì đang học và nghịch ngợm, mình sẽ update thêm ở đây để improve cái bài này lên. haha

Leave a Comment