2012-05-07 31 views
7

Tôi đang googling nó rất nhiều. Tôi chỉ muốn dòng này:Bash: Làm thế nào tôi có thể thay thế một chuỗi bằng dòng mới trong osx bash?

echo "Replace <newLine> it by <newLine> NEWLINE <newLine> in my OSX terminal <newLine> and bash script" | sed -e 's/<newLine>/\n/g' 

hoạt động trong thiết bị đầu cuối osx của tôi và trong tập lệnh bash của tôi. Tôi không thể sử dụng sed cho điều này? Có giải pháp một dòng khác không?

+0

Liệu OS X 'sed' hỗ trợ này: 'sed 's//\ o12/g''? Đó là chữ "o" chứ không phải là số không. Giá trị bát phân cho một dòng mới là 12. Nó hoạt động trên Linux (nhưng cũng vậy '\ n'). –

+0

@DennisWilliamson không hoạt động trong bash của tôi :) – Rodrigo

+0

lol, vì vậy nó không hoạt động với OS X 'sed' :) – Rodrigo

Trả lời

4

Chỉ sử dụng bash:

STR="Replace <newLine> it by <newLine> NEWLINE <newLine> in my OSX terminal <newLine> and bash script" 
$ echo ${STR//<newLine>/\\n} 
Replace \n it by \n NEWLINE \n in my OSX terminal \n and bash script 

$ echo -e ${STR//<newLine>/\\n} 
Replace 
it by 
NEWLINE 
in my OSX terminal 
and bash script 

Một lời giải thích nhanh chóng ở đây - cú pháp tương tự như cú pháp thay thế sed, nhưng bạn sử dụng một dấu gạch chéo kép (//) để chỉ thay thế tất cả các trường của chuỗi. Nếu không, chỉ có lần xuất hiện đầu tiên của chuỗi được thay thế.

1

Điều này có thể làm việc cho bạn:

echo "Replace <newLine> it by <newLine> NEWLINE <newLine> in my OSX terminal <newLine> and bash script" | 
sed 'G;:a;s/<newLine>\(.*\(.\)\)$/\2\1/;ta;s/.$//' 
Replace 
it by 
NEWLINE 
in my OSX terminal 
and bash script 

EDIT: OSX không chấp nhận nhiều lệnh xem here

echo "Replace <newLine> it by <newLine> NEWLINE <newLine> in my OSX terminal <newLine> and bash script" | 
sed -e 'G' -e ':a' -e 's/<newLine>\(.*\(.\)\)$/\2\1/' -e 'ta' -e 's/.$//' 
Replace 
it by 
NEWLINE 
in my OSX terminal 
and bash script 

Tuy nhiên, một cách khác:

echo "Replace <newLine> it by <newLine> NEWLINE <newLine> in my OSX terminal <newLine> and bash script" | 
sed $'s|<newLine>|\\\n|g' 
Replace 
it by 
NEWLINE 
in my OSX terminal 
and bash script 
+0

lol, xin lỗi, điều này không hoạt động trong OSX bash. – Rodrigo

+0

@Rodrigo cảm ơn bạn đã trả lời, có vẻ như OSX không chấp nhận nhiều lệnh như GNU sed. Bản chỉnh sửa sẽ làm cho nó tương thích với OSX. – potong

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