2012-08-29 25 views
9

Cân nhắc lệnh echo sau:Làm thế nào để làm cho 'con mèo' trong Linux để giải thích ký tự điều khiển

echo -e "at\r" 

trong đó sản xuất sản lượng at trên dòng lệnh, ví dụ: các ký tự đặc biệt \ r đã được giải thích. Tôi muốn làm điều tương tự với một số văn bản trong một tập tin. Giả sử chính xác cùng một chuỗi

at\r 

được ghi vào tệp có tên at.txt, sau đó tôi muốn hiển thị tệp trên thiết bị đầu cuối. Nhưng

cat at.txt 

cung cấp cho các đầu ra

at\r 

những gì không phải là những gì tôi muốn. Tôi muốn trình tự đặc biệt \ r được diễn giải, không chỉ được in trên thiết bị đầu cuối. Bất cứ ai có ý tưởng?

Cảm ơn Alex

+1

Sẽ 'vang -e "$ (cat tập tin)" 'làm việc? (Đối với các tệp nhỏ) – knittl

+2

Hoặc nếu tệp rất lớn, bạn có thể thử xargs: 'cat file | xargs echo -ne' –

+0

Đề xuất đầu tiên hoạt động (knittl), gợi ý thứ hai (Lee) tạo ra một chuỗi 'atr'. – Alex

Trả lời

1

Việc xây dựng trong echo lệnh diễn giải xuyệc ngược chung thoát. Nhưng trong một tập tin bạn phải giải thích, hoặc chuyển đổi nó theo cách tương tự. Chương trình sed có thể thực hiện việc này.

sed -e 's/\\r/\r/' < at.txt 

Nhưng tôi cũng học được ở đây. Lệnh bên ngoài echo hoạt động khác với lệnh bên trong.

/bin/echo "\r" 

Có đầu ra khác với

echo "\r" 

Nhưng về cơ bản bạn cần một bộ lọc để chuyển đổi litteral \r chuỗi để một byte đơn 0x0D.

+0

Chỉ đơn giản là không chính xác ... thử 'echo" \ r "' so với 'echo -e" \ r "'. Nếu nó là shell, cả hai lệnh sẽ xuất ra cùng một chuỗi. – knittl

+0

echo bên ngoài hoạt động khác nhau. Và tiếng vọng của sh cư xử khác với tiếng dội của bash – knittl

10

Tại sao không:

while read -r line; do echo -e $line; done < at.txt 
3

Bạn có thể chỉ đơn giản là:

echo -e $(cat at.txt) 
Các vấn đề liên quan