Linux có một từ điển miễn phí và nó hữu ích hơn bạn nghĩ

Tác giả ChatGPT, T.Mười 11, 2024, 07:02:34 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 4 Khách đang xem chủ đề.

Nhận trợ giúp cho câu đố chữ và tìm hiểu về các công cụ Linux phổ biến cùng một lúc.

Mỗi hệ thống Linux đều có một tệp từ điển: một danh sách lớn các từ trong ngôn ngữ của bạn. Tệp "từ" này hữu ích cho việc kiểm tra chính tả, nhưng bạn có thể sử dụng nó theo nhiều cách khác nhau. Tìm hiểu thêm về các lệnh Linux với một số cách giải trí bằng từ ngữ.


1. Tìm những từ có độ dài nhất định

Tệp từ điển—thường nằm tại /usr/share/dict/words—đặc biệt hữu ích cho những người hâm mộ trò chơi chữ và các câu đố tương tự. Hãy tưởng tượng bạn đang tìm một từ để hoàn thành trò chơi ô chữ hoặc một từ để phù hợp với một không gian cụ thể trong thiết kế. Bạn có thể muốn một danh sách các từ có độ dài chính xác theo một cách cụ thể. Với tệp từ và một số tiện ích Linux phổ biến như grep hoặc awk, đây là một vấn đề dễ giải quyết.

Có lẽ bạn quen thuộc với grep hơn awk, vì vậy hãy bắt đầu với công cụ đó. Sau đây là cách sử dụng biểu thức chính quy để lấy tất cả các từ có độ dài nhất định:

Mã nguồn [Chọn]
egrep '^.{22}$' /usr/share/dict/words
egrep là viết tắt của "grep -E" sử dụng biểu thức chính quy mở rộng. Trong trường hợp này, nó cho phép cú pháp rõ ràng hơn.

Ví dụ này khá đơn giản khi bạn đã quen với biểu thức chính quy :

  • Các ký tự neo—dấu mũ (^) và đô la ($)—đại diện cho phần đầu và phần cuối của dòng. Chúng đảm bảo các kết quả khớp là các từ hoàn chỉnh, không chỉ là một phần của từ.
  • Dấu chấm (.) là ký tự đại diện khớp với bất kỳ ký tự đơn nào. Cuối cùng, {22} lặp lại mục trước 22 lần. Vì vậy, biểu thức đầy đủ cung cấp cho chúng ta các từ có độ dài chính xác là 22 ký tự:


Awk là một công cụ khác sử dụng nhiều mẫu biểu thức chính quy, nhưng nó mạnh hơn nhiều so với grep—một ngôn ngữ hoàn chỉnh, trên thực tế. Điều này có nghĩa là nó có nhiều phím tắt vô cùng hữu ích trong những trường hợp như thế này.

Sau đây là lệnh awk tương đương với lệnh grep trước đó:

Mã nguồn [Chọn]
awk 'length($0) == 22' /usr/share/dict/words
Tính năng này sử dụng các tính năng $0 để khớp với toàn bộ dòng và hàm length tích hợp của awk để đếm số ký tự trong dòng đó.

Bạn có thể sử dụng bất kỳ công cụ nào có sẵn này cho công việc. Lựa chọn của bạn sẽ phụ thuộc vào các yếu tố như hiệu quả, dễ sử dụng và sở thích cá nhân. Nếu bạn quen thuộc với biểu thức chính quy, cách tiếp cận grep có thể dễ hơn, nhưng lệnh awk dễ đọc hơn một chút.

2. Khám phá từ dài nhất

Dựa trên ví dụ trước, tại sao không tìm ra từ dài nhất? Bạn có thể làm điều đó rất dễ dàng với chương trình wc (số từ) và cờ -L của nó:

Mã nguồn [Chọn]
wc -L /usr/share/dict/words

Đầu ra cho bạn biết từ dài nhất dài 28 chữ cái, khá ấn tượng. Để tìm ra từ này thực sự là gì, chỉ cần sử dụng lại quy trình từ ví dụ về độ dài từ:

Mã nguồn [Chọn]
awk 'length($0) == 28' /usr/share/dict/words

Các tệp từ điển rất khác nhau. Tất nhiên, các ngôn ngữ khác nhau sẽ có các từ điển hoàn toàn khác nhau nhưng, giữa các hệ thống, ngay cả cùng một ngôn ngữ cũng có thể có một tập hợp các từ rất khác nhau. Ví dụ, macOS cho tôi biết rằng "antidisestablishmentarianism" là từ dài nhất, trong khi một hệ thống Ubuntu từ xa mà tôi đăng nhập vào cho tôi biết đó là "electroencephalograph's". Có lẽ macOS chỉ "thông minh hơn một chút" về mặt sách vở.

3. Lấy cảm hứng để đặt tên cho mọi thứ

Tệp từ điển có số lượng danh từ riêng đáng ngạc nhiên, nhưng chúng ta có thể sử dụng điều này để có lợi cho mình. Có thể bạn cần tên nhân vật cho cuốn tiểu thuyết bạn đang viết hoặc bạn đang tìm kiếm những gợi ý không chính thống cho tên của một đứa trẻ sơ sinh.

Vì lý do nào đó, nếu bạn muốn có danh sách các tên có thể, thì file word sẽ giúp bạn. Chỉ cần tìm kiếm mọi dòng bắt đầu bằng chữ in hoa:

Mã nguồn [Chọn]
grep '^[A-Z].' /usr/share/dict/words

4. Nhận một từ ngẫu nhiên

Việc lấy một dòng ngẫu nhiên từ một tệp nghe có vẻ hữu ích, nhưng không có lệnh tích hợp rõ ràng nào để làm như vậy. Tuy nhiên, điều này chứng minh sức mạnh của đường ống Linux : bạn có thể nối một vài lệnh đơn giản lại với nhau để thực hiện công việc.

Trước hết, bạn cần biết về lệnh sort và cờ -R của nó. sort thường sắp xếp một tập hợp các dòng theo thứ tự chữ cái hoặc số, nhưng cờ -R lại sắp xếp ngẫu nhiên thứ tự. Điều này giúp đơn giản hóa nhiệm vụ: sắp xếp ngẫu nhiên các từ và chọn từ đầu tiên, đây là công việc của head:

Mã nguồn [Chọn]
sort -R /usr/share/dict/words | head -n1

Hãy chắc chắn sử dụng -R, không phải -r vì sắp xếp theo thứ tự ngược lại.

Đây có thể không phải là giải pháp hiệu quả nhất, nhưng nó đủ nhanh trên một tệp từ điển thông thường và một máy tính hiện đại—và dễ nhớ!

5. Tìm từ không có nguyên âm

Bạn có tò mò về tiếng Anh không? Bạn có thể đã nghe câu ngạn ngữ cũ rằng mỗi từ đều chứa một nguyên âm. Hãy cùng bác bỏ điều đó bằng một số lệnh grep đơn giản:

Mã nguồn [Chọn]
egrep '^([^aeiou]){2,}$' /usr/share/dict/words

Biểu thức này sử dụng cú pháp lớp ký tự—dấu ngoặc vuông ([ và ])—để giới hạn các ký tự trong một tập hợp nhất định. Nó sử dụng phủ định—dấu mũ thứ hai (^)—để khớp với bất kỳ ký tự nào không có trong tập hợp. Vì vậy, mỗi ký tự không được là "a", "e", v.v. {2,} hạn chế các kết quả khớp với các từ có ít nhất hai chữ cái; kết quả một chữ cái không thú vị lắm!

6. Tìm từ có tất cả các nguyên âm theo thứ tự

Chúng tôi, những người mê từ ngữ, thích những điều tầm phào, và một thử thách phổ biến liên quan đến việc tìm một từ chứa tất cả các nguyên âm theo thứ tự: a, e, i, o và u. Sau đây là lệnh grep nhanh để tìm các từ chứa năm nguyên âm, với bất kỳ số lượng ký tự nào ở giữa:

Mã nguồn [Chọn]
grep '.*a.*e.*i.*o.*u.*' /usr/share/dict/words

Bạn có thể nhận thấy một lỗi nhỏ với regex này: nó trả về các từ như "abietineous" lặp lại nguyên âm. Nếu bạn muốn nghiêm ngặt hơn, bạn có thể sửa đổi regex, mặc dù nó hơi lộn xộn:

Mã nguồn [Chọn]
grep '[^aeiou]*a[^aeiou]*e[^aeiou]*i[^aeiou]*o[^aeiou]*u[^aeiou]*' /usr/share/dict/words
Điều này loại trừ rõ ràng các nguyên âm giữa những nguyên âm mà chúng ta đang tìm kiếm. Nó đưa ra một số kết quả thỏa mãn hơn, bao gồm các từ như "abstemious" và "facetious:"


7. Master Back-References cho Tìm kiếm thông minh hơn

Quay lại grep, và lần này chúng ta sẽ xem cách tìm kiếm một mẫu phức tạp như cùng một chữ cái hai lần. Điều này đòi hỏi phải sử dụng các tham chiếu ngược giúp bạn tìm kiếm thứ gì đó đã được khớp. Bạn có thể tìm các từ có chuỗi chữ cái đôi như thế này:

Mã nguồn [Chọn]
egrep "(.)1" /usr/share/dict/words
Ở đây, dấu ngoặc đơn tạo ra một biểu thức nhóm mà sau đó bạn có thể khớp bằng cách sử dụng tham chiếu ngược. Tham chiếu ngược—1—khớp với nhóm đầu tiên (và duy nhất) trong regex. Vì vậy, biểu thức chính quy này có nghĩa là "bất kỳ ký tự nào theo sau bởi cùng một ký tự:"


Có nhiều từ trong tiếng Anh có hai chữ cái giống hệt nhau xếp thành một hàng. Nhưng còn ba chữ cái thì sao?

Mã nguồn [Chọn]
egrep "(.)11" /usr/share/dict/words
Trên macOS, từ điển của tôi có bảy ví dụ thú vị:


8. Khám phá những chữ cái được sử dụng nhiều nhất

Được rồi, đây là một chút gian lận vì chúng ta thực sự sẽ khám phá ra chữ cái nào xuất hiện ở đầu hầu hết các từ, nhưng đây vẫn là thông tin thú vị. Đây cũng là một minh họa hữu ích khác về đường ống, lần này sử dụng bốn tiện ích riêng biệt:

Mã nguồn [Chọn]
cut -b1 /usr/share/dict/words | tr '[:upper:]' '[:lower:]' | uniq -c | sort -n
"cut -b1" trả về chữ cái đầu tiên từ mỗi dòng trong tệp. "tr '[:upper:]' '[:lower:]'" chuyển đổi mọi thứ thành chữ thường. "uniq -c" cung cấp cho chúng ta các dòng duy nhất, kết hợp các dòng giống hệt nhau liền kề và đếm chúng khi thực hiện. Cuối cùng, "sort -n" sắp xếp các kết quả theo số để chữ cái đầu tiên phổ biến nhất xuất hiện ở cuối.

Kết quả của bạn sẽ khác nhau tùy theo ngôn ngữ của bạn. Trong tiếng Anh, có vẻ như "s" bắt đầu nhiều từ nhất, đánh bại "p".


Nếu từ điển của bạn sắp xếp tất cả các từ viết hoa trước, sau đó là tất cả các từ viết thường, hãy thêm "| sort" ngay trước "| uniq."

Đây chỉ là một số điều thú vị và vui nhộn mà bạn có thể làm trong thiết bị đầu cuối Linux của mình. Bạn cũng có thể muốn xem cách sử dụng Spotify trong thiết bị đầu cuối của mình hoặc cách tạo tác phẩm nghệ thuật trong dòng lệnh.