2014-06-06 16 views
8

cho phép giả sử tôi có biến sốBash - thay thế gạch chéo

DATE="04/Jun/2014:15:54:26".

Tôi cần thay thế / bằng \/ để nhận được chuỗi "04\/Jun\/2014:15:54:26".

tôi đã cố gắng tr lệnh - echo "04\Jun\2014:15:54:26" | tr '\' '\\/'

với kết quả "04\Jun\2014:15:54:26".

Nó không thỏa mãn tôi. Có ai giúp được không ?

+0

'người đàn ông tr' sẽ cho bạn biết lý do tại sao nó không hoạt động. Bạn có thể sử dụng 'sed'. – devnull

+0

Tại sao không tạo DATE ở định dạng đó? Ngoài ra nếu bạn đang lặp lại và viết ngày trước khi tr/sed/ect tại sao không viết nó trong định dạng đó? –

+0

Bạn đang cố gắng làm gì ở đây? Thay thế dấu gạch chéo về phía trước bằng dấu gạch chéo ngược hoặc thoát tất cả dấu gạch chéo về phía trước? Câu hỏi này có thể sử dụng một số thanh toán bù trừ. :) – wojciii

Trả lời

4

Sử dụng SED cho thay:

sed 's#/#\\/#g' <filename.txt> newfilename.txt 

Bạn thường sử dụng "/" thay vì "#" nhưng miễn là nó ở đó nó không quan trọng.

Tôi đang viết điều này trên một cửa sổ PC vì vậy tôi hy vọng nó là đúng, bạn có thể phải thoát khỏi các dấu gạch chéo với một dấu gạch chéo.

Sed giải thích, "-e", cho phép bạn chỉnh sửa tệp tại chỗ. Bạn có thể sử dụng -i để tạo sao lưu tự động.

sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html 
2

đây bạn đi:

kent$ echo "04/Jun/2014:15:54:26"|sed 's#/#\\/#g' 
04\/Jun\/2014:15:54:26 

dòng tr của bạn là không đúng, bạn có thể mis-hiểu những gì tr làm, tr 'abc' 'xyz' sẽ thay đổi a->x, b->y, c->z, không thay đổi toàn bộ abc->xyz ..

25

Không cần sử dụng echo + a pipe + sed.

Một biến thay thế đơn giản là đủ và nhanh hơn:

echo ${DATE//\//\\/} 

#> 04\/Jun\/2014:15:54:26 
+0

Điều này dường như không hoạt động trong Bash 4.2.25 - nó chỉ thay thế dấu gạch chéo đầu tiên. Ví dụ: 'FileDirRelativeToProjectRoot =" source \ scripts \ components \ screens \ picker_view "; echo "$ {FileDirRelativeToProjectRoot/\\ //}" 'in' source/scripts \ components \ screens \ picker_view' – GuyPaddock

+0

Chỉ cần tìm ra, và cách tiếp cận này không hoạt động. Bạn cần phải chắc chắn rằng bạn sử dụng hai dấu gạch chéo về phía trước sau tên biến. Vì vậy, trong ví dụ của tôi, '$ {FileDirRelativeToProjectRoot // \\ //}'. Nếu không, nó chỉ thay thế cái đầu tiên. Hơi tinh tế ... – GuyPaddock

+0

Rất thanh lịch. Yêu nó. – deepelement

Các vấn đề liên quan