Các file văn bản có mặt ở khắp mọi nơi và bạn sẽ phải đọc qua chúng, bất kể vai trò hay trách nhiệm công việc của bạn là gì. Trên thực tế, nếu là một chuyên gia CNTT, bạn sẽ phải tạo, đọc hoặc làm việc với các file văn bản thường xuyên hơn, vì chúng có nhiều định dạng. Tính linh hoạt này cũng đã làm cho các file văn bản trở thành cách thuận tiện nhất để xác định script, lưu trữ chi tiết cấu hình, v.v… | C-n.vn

Các file văn bản có mặt ở khắp mọi nơi và bạn sẽ phải đọc qua chúng, bất kể vai trò hay trách nhiệm công việc của bạn là gì. Trên thực tế, nếu là một chuyên gia CNTT, bạn sẽ phải tạo, đọc hoặc làm việc với các file văn bản thường xuyên hơn, vì chúng có nhiều định dạng. Tính linh hoạt này cũng đã làm cho các file văn bản trở thành cách thuận tiện nhất để xác định script, lưu trữ chi tiết cấu hình, v.v…

PowerShell hiểu tầm quan trọng này của các file văn bản và giúp dễ dàng truy xuất hay đọc chúng một cách dễ dàng. Trong bài viết này, Quantrimang.com có thể chỉ cho bạn cách đọc file văn bản trong PowerShell.

Đọc toàn bộ nội dung

Đọc toàn bộ nội dung
Đọc toàn bộ nội dung

Khi bạn muốn đọc toàn bộ nội dung của file văn bản, cách dễ nhất là sử dụng hàm Get-Content tích hợp. Đây là code cho phép bạn làm điều này:

Get-Content C:logslog01012020.txt
Nội dung của file này sẽ được hiển thị trong màn hình PowerShell ISE hoặc Command Prompt
Nội dung của file này sẽ được hiển thị trong màn hình PowerShell ISE hoặc Command Prompt

Khi bạn thực thi lệnh này, nội dung của file này sẽ được hiển thị trong màn hình PowerShell ISE hoặc Command Prompt, tùy thuộc vào nơi bạn thực thi.

Bạn cũng có thể di chuyển tất cả nội dung sang một biến và sử dụng biến đó để xử lý thêm, nếu đó là thứ mà bạn muốn code của mình thực hiện.

$file_data = Get-Content C:logslog01012020.txt

Bây giờ, bạn có thể sử dụng biến $file_data này để phân tích cú pháp hoặc xử lý thêm.

READ:  Các tướng U Hồn thật sự rất tốt khi kết hợp với nhiều hệ tộc khác vì các U Hồn sẽ tăng sát thương phép. Đội hình U Hồn thực sự mạnh mẽ nhưng các tướng chính U Hồn thì lại xuất hiện ở cuối game. | C-n.vn

Đọc một phần nội dung

Bạn có thể chọn các dòng muốn đọc
Bạn có thể chọn các dòng muốn đọc

Trong nhiều trường hợp, bạn chỉ có thể phải đọc một phần nhất định của file để có được thông tin bạn muốn. Tương tự như truy vấn SQL, bạn có thể chọn các dòng muốn đọc và code để thực hiện điều đó là:

$file_data = Get-Content C:logslog01012020.txt
$file_data | Select-Object -First 10

Như code cho thấy, 10 dòng đầu tiên sẽ được lưu trữ trong biến chứ không phải toàn bộ nội dung. Bạn có thể hiển thị nội dung của biến này hoặc sử dụng nó để xử lý nhiều hơn.

Tương tự như vậy, chúng ta cũng có thể đọc một vài dòng cuối cùng:

$file_data = Get-Content C:logslog01012020.txt
$file_data | Select-Object -Last 10

Đọc từng dòng một

Khi muốn đọc file để hiểu nội dung của nó, bạn phải thực hiện từng dòng một và tin tốt là, điều này có thể với PowerShell. Trong thực tế, có 2 cách để làm điều đó.

Sử dụng Get-Content

Hàm Get-Content đọc mọi dòng trong văn bản và lưu trữ chúng dưới dạng một mảng (array), trong đó mỗi dòng là một phần tử mảng. Trong ví dụ trên, bài viết đã sử dụng một biến để đọc tất cả nội dung.

$file_data = Get-Content C:logslog01012020.txt

Nếu xuất loại của biến này, bạn có thể thấy đó là một mảng. Điều này nghĩa là bạn có thể chọn ra các dòng cụ thể bằng cách sử dụng chỉ mục mảng. Ví dụ, nếu muốn đọc dòng đầu tiên, bạn chỉ cần nhập:

$file_data [0]

Và lệnh này sẽ hiển thị dòng đầu tiên cho bạn.

$file_data[1]

Lệnh này sẽ hiển thị dòng thứ hai (tương tự như vậy với các dòng tiếp theo).

READ:  Nếu bạn đang sở hữu hoặc có ý định sử dụng sản phẩm của Apple, bạn nên cân nhắc tới dịch vụ bảo hành bên ngoài của hãng công nghệ lớn này. AppleCare+ chính là dịch vụ mà Apple tung ra để người dùng có thể mua phòng trường hợp thiết bị đang sử dụng gặp vấn đề gì (tất nhiên mỗi sản phẩm mới luôn có kèm chính sách bảo hành). Nói cách khác, đây chính là kiểu kéo dài thời gian bảo hành cho sản phẩm. | C-n.vn

Sử dụng lớp StreamReader

Tùy chọn thứ hai là sử dụng một class (lớp) .NET có tên StreamReader.

$stream_reader = New-Object System.IO.StreamReader{C:logslog01012020.txt}

Bây giờ, bạn có nội dung của file nhật ký trong biến $stream_reader này và vì nó thuộc về lớp StreamReader, bạn có thể sử dụng nhiều phương thức tích hợp sẵn để có được phần văn bản mình muốn.

Khi bạn nhập:

$stream_reader.ReadToEnd()

Lệnh sẽ xuất tất cả nội dung trên màn hình của bạn, tương tự như Get-Content.

Để đọc dòng hiện tại, bạn có thể sử dụng phương pháp sau:

$stream_reader.ReadLine()

Nhưng một mình lệnh này có thể không hữu ích, vì vậy bạn sẽ phải chạy nó trong một vòng lặp và đọc nội dung của file văn bản, từng dòng một.

$stream_reader = New-Object System.IO.StreamReader{C:logslog01012020.txt}
$line_number = 1
while (($current_line =$stream_reader.ReadLine()) -ne $null)
{
Write-Host "$line_number $current_line"
$line_number++
}

Đoạn code trên sẽ bắt đầu với dòng đầu tiên và xuất ra từng dòng với số dòng kèm theo để dễ đọc. Bạn thậm chí có thể sử dụng bất kỳ phương thức chuỗi có sẵn nào trên biến $current_line để phân tích cú pháp thêm.

Phương pháp này lý tưởng để đọc các file lớn, vì khi bạn lưu trữ nội dung trong một biến, nó có thể chiếm quá nhiều bộ nhớ và ảnh hưởng đến hiệu suất. Vì vậy, đây là một cách hiệu quả hơn để đi đến nội dung bạn muốn.

Tìm văn bản cụ thể

Trong nhiều trường hợp, bạn muốn tìm một văn bản cụ thể trong một file và cách tốt nhất là sử dụng cmdlet Where-Object để lọc nội dung.

$file_data = Get-Content C:logslog01012020.txt | Where-Object {$_ -like ‘*error*’}

Đoạn code trên sẽ xuất ra những dòng có từ “error” trong đó. Ở đây, $_ là một biến biểu thị dòng hiện tại từ nội dung, đến từ Get-Content.

READ:  Một số người dùng Windows đã báo cáo việc không thể thoát khỏi chế độ Diagnostic PC. Sau khi chờ đợi trong vài giờ, một số người dùng bị ảnh hưởng đã thử khởi động lại để thoát khỏi chế độ này, nhưng PC của họ lại chuyển sang màn hình tối, hiển thị logo và sau đó màn hình Diagnostic PC lại hiển thị. Sự cố đang xuất hiện trên Windows 7, Windows 8.1 và Windows 10. | C-n.vn

Bên cạnh Where-Object, bạn cũng có thể sử dụng các toán tử matchregex để tìm phần văn bản chính xác mà bạn muốn.

Thêm tùy chọn với Get-Content

Get-Content là một cmdlet rất linh hoạt đi kèm với nhiều tùy chọn. Dưới đây là một số điều bạn có thể làm với nó.

Đếm số lượng dòng trong file

Bạn có thể muốn biết số lượng dòng có sẵn trong file. Code để thực hiện việc đó là:

$file_data = Get-Content C:logslog01012020.txt | Measure-Object

Chọn số dòng cụ thể ở đầu và cuối

Trước đó, bạn đã tìm hiểu cách chọn một vài dòng đầu tiên hoặc vài dòng cuối bằng cách sử dụng cmdlet Select-Object. Bạn cũng có thể nhận được kết quả tương tự bằng cách sử dụng một số phương thức tích hợp với Get-Content.

Để có được một vài dòng đầu tiên, phương thức là:

$file_data = Get-Content C:logslog01012020.txt -TotalCount 3

Lệnh này sẽ trả về 3 dòng đầu tiên từ file.

$file_data = Get-Content C:logslog01012020.txt -Tail 3

Lệnh này sẽ trả về 3 dòng cuối cùng từ file.

File cập nhật liên tục

Giả sử file nhật ký của bạn được cập nhật liên tục và bạn muốn xem phần cuối của file nhật ký đó để đọc các giá trị mới nhất được update. Bạn có thể thêm tham số Wait, như thế này:

$file_data = Get-Content C:logslog01012020.txt -Tail 3 -Wait

Lệnh này sẽ liên tục theo dõi file nhật ký để tìm các dòng mới được thêm và hiển thị cho bạn.

  • PowerShell 7, bản cập nhật lớn nhất cho PowerShell có thay đổi gì?
  • Cách cài đặt PowerShell 7.0 trong Windows 10/8/7
  • Cách vô hiệu hóa hoàn toàn PowerShell 2.0 trong Windows 10
  • Phải làm gì để sửa lỗi Powershell has stopped working problem?
  • Cách mở PowerShell với quyền Admin trên Windows 10
  • Command Prompt (cmd) và PowerShell khác nhau như thế nào?
Xem thêm bài viết thuộc chuyên mục: Công nghệ

Có thể bạn quan tâm