2012-04-04 85 views
7

Tôi cần phải thay đổi chữ cái đầu tiên của mỗi dòng trong một tệp thành chữ hoa, ví dụ:Thay đổi chữ cái đầu tiên của mỗi dòng trong một tệp thành chữ hoa

the bear ate the fish. 
the river was too fast. 

Sẽ trở thành:

The bear ate the fish. 
The river was too fast. 
  • Tài liệu này chứa một số chữ cái đặc biệt: a, a, á, à, ǎ, a, b, c, d, đ, e, é, è, ě, ē, f, g, h, i, i, í, ì, ǐ, ī, j, k, l, m, n, o, o, ó, ò, ǒ, ō, p, q, r, s, t, u, u, ú, ù, ǔ, ü, ǘ, ǜ, ǚ, ǖ, ū, v, w, x, y và z.
  • Các dạng chữ hoa của các chữ cái này là: A, A, Á, À, Ǎ, Ā, B, C, D, E, E, E, È, Ě, Ē, F, G, H, I, I , Í, Ì, Ǐ, Ī, J, K, L, M, N, O, O, Ó, Ò, Ǒ, Ō, P, Q, R, S, T, U, U, Ú, Ù, Ǔ , Ü, Ǘ, Ǜ, Ǚ, Ǖ, Ū, V, W, X, Y và Z.

Làm cách nào để thay đổi chữ cái đầu tiên của mỗi dòng trong tệp thành chữ hoa?

+1

Tôi nghĩ rằng những gì Engineer có nghĩa là những gì ngôn ngữ lập trình. PHP, v.v. –

+0

BASH sẽ được ưu tiên. – Village

+0

Câu hỏi được gắn thẻ 'bash' ... –

Trả lời

11

Sử dụng sed:

sed 's/^\(.\)/\U\1/' yourfile > convertedfile 

bé giải thích:

  • các ^ đại diện cho sự khởi đầu của một dòng.
  • . trận đấu bất kỳ ký tự
  • \U chuyển đổi sang chữ hoa
  • \(... \) định một phần để được tham chiếu sau (như \1 trong trường hợp này); dấu ngoặc đơn sẽ được thoát ở đây.

Do không cố gắng chuyển hướng đầu ra để cùng một tập tin trong một lệnh (ví dụ: > yourfile) như bạn sẽ mất dữ liệu của bạn. Nếu bạn muốn thay thế trong cùng một tệp thì hãy kiểm tra câu trả lời của joelparkerhenderson.

2

Để thay đổi các tập tin tại chỗ:

sed -i -e 's/^\(.\)/\U\1/' file.txt 
+0

Hoạt động! Nhưng cũng có, Tại sao tôi cũng nhận được lỗi (cảnh báo ??): sed: không thể đọc: Không có tập tin hoặc thư mục như vậy? – bikashg

+0

@bikashg bạn gặp lỗi vì có lỗi đánh máy trong câu trả lời của tôi-- xin lỗi-- Tôi đã sửa nó ngay bây giờ. – joelparkerhenderson

5
pearl.311> cat file1 
linenumber11 
linenumber2 
linenumber1 
linenumber4 
linenumber6 
pearl.312> awk '{print toupper(substr($0,1,1))""substr($0,2)}' file1 
Linenumber11 
Linenumber2 
Linenumber1 
Linenumber4 
Linenumber6 
pearl.313> 
+0

Hoạt động tốt trên OSX. Cảm ơn. – Sufian

+0

Đây là người duy nhất làm việc cho tôi trên OSX –

1

Bạn có thể đặt ký tự đặc biệt của bạn ở vị trí của một-z và A-Z

function up { local c="$1" ; echo -e "$c" | tr '[a-z]' '[A-Z]' ; } 
while read line 
do 
    echo $(up ${line:0:1})${line:1} 
done 
5

Có một vài câu trả lời sed với s/^\(.\)/\U\1/.GNU cũng sed có một chỉ thị \u mà chỉ thay đổi chữ cái tiếp theo để chữ hoa, vì vậy

sed 's/./\u&/' 

Mặc dù nếu ký tự đầu tiên trên một dòng là một không gian, bạn sẽ không thấy một chữ cái viết hoa, vì vậy

sed 's/[[:alpha:]]/\u&/' 
+0

Tôi muốn nói đây là câu trả lời hay hơn. –

0

tinh khiết bash:

while read x ; do echo "${x^*}" ; done <inputfile> outputfile 

thử nghiệm/demo (loại bỏ các mã sau khi 0.123.cho đầu ra hoàn chỉnh hơn):

for f in a, a, á, à, ǎ, ā, b, c, d, e, e, é, è, ě, ē, f, g, h, i, i, í, ì, ǐ, ī, \ 
     j, k, l, m, n, o, o, ó, ò, ǒ, ō, p, q, r, s, t, \ 
     u, u, ú, ù, ǔ, ü, ǘ, ǜ, ǚ, ǖ, ū, v, w, x, y, and z. 
do echo "$f foo bar." ; done | 
while read x ; do echo "${x^*}" ; done | head -15 | tail -6 

Output:

E, foo bar. 
E, foo bar. 
É, foo bar. 
È, foo bar. 
Ě, foo bar. 
Ē, foo bar. 
Các vấn đề liên quan