2012-10-24 23 views
56

Điều này phải dễ dàng: Tôi muốn chạy sed đối với chuỗi ký tự bằng chữ, chứ không phải tệp đầu vào. Nếu bạn tự hỏi tại sao, nó là, ví dụ như chỉnh sửa các giá trị được lưu trữ trong các biến, không nhất thiết phải dữ liệu văn bản.sed với chuỗi chữ - không phải tệp đầu vào

Khi tôi làm:

sed 's/,/','/g' "A,B,C" 

trong đó A, B, C là đen mà tôi muốn thay đổi để A ' 'B',' C

tôi nhận được

Can't open A,B,C 

Như thể nó nghĩ A, B, C là một tập tin.

Tôi đã cố gắng đường ống nó để echo:

echo "A,B,C" | sed 's/,/','/g' 

tôi nhận được một nhắc nhở.

Cách phù hợp để làm điều đó là gì?

Trả lời

85

Bạn có xung đột dấu nháy đơn, vì vậy sử dụng:

echo "A,B,C" | sed "s/,/','/g" 

Nếu sử dụng , bạn có thể làm quá (<<< là một here-string):

sed "s/,/','/g" <<< "A,B,C" 

nhưng không

sed "s/,/','/g" "A,B,C" 

sed mong đợi (các) tệp là argu ment (s)

EDIT:

nếu bạn sử dụng hoặc bất kỳ những người khác:

echo string | sed ... 
6

trình như bạn muốn:

echo "A,B,C" | sed s/,/\',\'/g 
2

phiên bản Mỹ sử dụng các biến trong một bash script:

Tìm một ny dấu gạch chéo ngược và thay thế bằng dấu gạch chéo về phía trước:

input="This has a backslash \\" 

output=$(echo "$input" | sed 's,\\,/,g') 

echo "$output" 
Các vấn đề liên quan