sed với chuỗi ký tự - không phải tệp đầu vào


91

Điều này sẽ dễ dàng: Tôi muốn chạy sed trên một chuỗi ký tự, không phải tệp đầu vào. Nếu bạn thắc mắc tại sao, 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 là dữ liệu văn bản.

Khi tôi làm:

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

trong đó A, B, C là chữ mà tôi muốn đổi thành A ',' B ',' C

tôi có

Can't open A,B,C

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

Tôi đã thử nối nó để tạo tiếng vang:

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

Tôi nhận được một lời nhắc.

Cách làm đúng là gì?

Câu trả lời:


147

Bạn có một xung đột dấu ngoặc kép, vì vậy hãy sử dụng:

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

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

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

nhưng không

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

sedmong đợi (các) tệp là (các) đối số

CHỈNH SỬA :

nếu bạn dùng hoặc bất kỳ cái nào khác:

echo string | sed ...

1
lạ, không làm việc cho tôi ... nhận ra đó là một thời gian trước đây đã được đăng, nhưng deprecation lạ nếu đó là vấn đề
siêu anh hùng

10

Hoạt động như bạn muốn:

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

5

Phiên bản của tôi sử dụng các biến trong tập lệnh bash:

Tìm bất kỳ dấu gạch chéo ngược nào và thay thế bằng dấu gạch chéo ngược:

input="This has a backslash \\"

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

echo "$output"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.