12/08/2018, 16:13

Cơ bản về thao tác với dữ liệu text trên Linux

Text - một cái tên không còn xa lạ gì trong giới lập trình viên. Text mang nghĩa là bản văn, một tập hợp của nhiều câu, mỗi câu lại gồm nhiều từ, mỗi từ gồm nhiều ký tự. Tùy theo từng ngôn ngữ mà các ký tự được thể hiện khác nhau. Việc xử lý những dữ liệu dạng text này luôn có trong hầu hết ...

Text - một cái tên không còn xa lạ gì trong giới lập trình viên. Text mang nghĩa là bản văn, một tập hợp của nhiều câu, mỗi câu lại gồm nhiều từ, mỗi từ gồm nhiều ký tự. Tùy theo từng ngôn ngữ mà các ký tự được thể hiện khác nhau. Việc xử lý những dữ liệu dạng text này luôn có trong hầu hết các ngôn ngữ lập trình, và nổi lên nhất là trong các ngôn ngữ thông dịch như Perl, Python, Ruby ....

Tuy nhiên, trong một hệ thống Linux, để đơn giản hóa quá trình xử lý dữ liệu văn bản, các nhà phát triển đã tạo ra các công cụ cơ bản để xử lý dữ liệu text trên tiêu chí một chương trình chỉ làm một việc nhưng sẽ làm việc đó một cách tốt nhất có thể. Và trên hết là các chương trình này đều không yêu cầu kỹ năng lập trình nhưng vẫn có thể dễ dàng sử dụng được. Sau đây mình xin phép được trình bày về một số chương trình(lệnh) giúp cho việc xử lý dữ liệu văn bản được thuận tiện hơn trong hệ thống Linux.

Là một trong những lệnh cơ bản nhất của một hệ thống Linux. Lệnh này có thể dùng để tạo, chèn, hiển thị và ghép nội dung của file.

  • Để tạo file dùng cú pháp như sau:

$$cat > simple.txt << "EOF"

This is the first line

This is the second line

EOF

EOF là ký tự được khai báo và dùng để kết thúc việc nhập liệu, có thể sử dụng một chuỗi bất kỳ thay thế. Trong trường hợp file simple không tồn tại thì một file mới sẽ được tạo với nội dung nhập vào như trên. Nếu không thì file simple.txt sẽ bị ghi đè với nội dung mới. Để tránh việc ghi đè dữ liệu có thể dùng cat >> thay cho cat > để dữ liệu tự động được chèn vào cuối file.

$$cat >> simple.txt << "EOF"

This is the third line

EOF

  • Nếu dùng cú pháp cat filename thì nội dung file filename sẽ được hiển thị.

$$cat simple.txt

This is the first line

This is the second line

This is the third line

  • Ngoài ra có thể dùng phối hợp việc hiển thị và chèn để ghép nội dung của 1 file vào cuối 1 file khác. VD:

$$cat simple1.txt >> simple2.txt

  • wc có nghĩa là wordcount, lệnh này đơn giản chỉ dùng để thống kê lượng dữ liệu có trong file
  • Cú pháp đơn giản nhất là wc filename VD:

wc simple.txt

3 15 70 simple.txt

Giá trị thứ nhất là số dòng (line), giá trị thứ 2 là số từ (word), giá trị thứ 3 là số ký tự (character) và cuối cùng là tên file.

  • Dùng để hiện thị những dòng có một phần nội dung nào đó VD:

$$grep "line" simple.txt

This is the first line

This is the second line

This is the third line

  • Hoặc có thể dùng tùy chọn -c để đếm số lần xuất hiện thay vì in hết ra VD:

$$grep -c "line" simple.txt

3

  • Một số tùy chọn khác -i không phân biệt hoa thường -l chỉ hiển thị tên file chứa nội dung cần tìm -n kèm theo số thứ tự của dòng xuất hiện
  • Hai lệnh head và tail có cách sử dụng tương tự nhau, đều là lấy ra một phần bản văn của file. Chỉ khác là lệnh head lấy phần bản văn ở đầu file còn tail lấy phần cuối bản văn. VD: head -n4 filename sẽ lấy ra 4 dòng đầu tiên của file filename tail -n8 filename sẽ lấy ra 8 dòng cuối của file filename
  • Ngoài ra có thể sử dụng -c thay cho -n để lấy dữ liệu tính theo ký tự thay vì tính theo dòng.
  • Dùng để sắp xếp các dòng dữ liệu bản văn trong file VD:

$$sort simple.txt

This is the first line

This is the second line

This is the third line

  • Ngoài ra có thể dùng thêm các tùy chọn sau -u bỏ qua các giá trị trùng lặp -r sắp xếp theo thứ tự giảm dần (mặc định sẽ là tăng dần) -f không phân biệt hoa thường

Trên đây chỉ là một số lệnh cơ bản nhất dùng để thao tác với dữ liệu text trên Linux. Vẫn còn rất nhiều lệnh hữu ích khác như cut, sed, awk ... nhưng do khả năng của mình có hạn nên mình sẽ tìm hiểu và bổ sung các lệnh này trong các bài viết tiếp theo. Xin cảm ơn mọi người đã theo dõi bài viết.

  • https://www.ibm.com/developerworks/aix/library/au-unixtext/index.html
  • https://www.linux.org/threads/command-line-text-manipulation.11825
0