Vì bạn hỏi cụ thể về awk
, đây là một số khác.
awk '{ gsub(/1\./,"") }1' input.txt
Như bất kỳ awk
hướng dẫn sẽ cho bạn biết, hình thức chung của một chương trình awk
là một chuỗi các 'tình trạng {hành động}'. Nếu bạn không có hành động nào, hành động mặc định sẽ được in. Nếu bạn không có điều kiện, các hành động sẽ được thực hiện vô điều kiện. Chương trình này sử dụng cả hai trường hợp đặc biệt này.
Phần đầu tiên là một hành động không có điều kiện, tức là nó sẽ được thực hiện cho tất cả các dòng. Hành động là thay thế tất cả các lần xuất hiện của cụm từ thông dụng /1\./
mà không có gì. Vì vậy, điều này sẽ cắt bất kỳ '1.' (bất kể ngữ cảnh) từ một dòng.
Phần thứ hai là điều kiện không có hành động, tức là phần này sẽ in nếu điều kiện là đúng và điều kiện luôn đúng. Đây là một thành ngữ phổ biến cho "chúng tôi đã làm - in bất cứ điều gì chúng tôi có bây giờ". Nó bao gồm chỉ đơn giản là hằng số 1
(mà khi được sử dụng như một điều kiện có nghĩa là "true", đơn giản).
Điều này có thể được cải cách theo một số cách. Ví dụ, bạn có thể đưa yếu tố in vào hành động đầu tiên;
awk '{ gsub(/1\./,""); print }' input.txt
Có thể bạn muốn thay thế phần nguyên, tức là bất kỳ số nào trước dấu chấm. Các regex cho rằng sẽ là một cái gì đó như /[0-9]+\./
.
gsub
là một phần mở rộng của GNU, vì vậy bạn có thể muốn thay thế bằng sub
hoặc một số loại vòng lặp nếu bạn cần tính di động cho cú pháp cũ awk
.
Câu trả lời trực tiếp là "không"; 'tr' thay thế các ký tự riêng lẻ, chứ không phải các chuỗi. Vì vậy, (a) lệnh của bạn sẽ xóa tất cả các lần xuất hiện của "1" và "." bất cứ nơi nào trong đầu vào; và (b) 'tr' không phải là lệnh đúng cho nhiệm vụ bạn đang hỏi. – tripleee