Câu trả lời của SiegeX tốt hơn cho trường hợp cụ thể này, nhưng bạn cũng nên biết cách chuyển văn bản tùy ý sang sed
.
sed
đang mong đợi tên tệp là tham số thứ hai, thứ ba, v.v. và nếu không tìm thấy tên tệp nào, nó sẽ đọc từ đầu vào tiêu chuẩn của nó. Vì vậy, nếu bạn có văn bản mà bạn muốn xử lý không có trong một tệp, bạn phải chuyển nó sang sed
. Cách đơn giản nhất là đây:
echo "blah blah" | sed 's/blah/blam/g'
Vì vậy, ví dụ của bạn sẽ trở thành:
LAT=$(echo "$LATLNG" | sed 's/(\(.*\),\(.*\))/\1/g')
LON=$(echo "$LATLNG" | sed 's/(\(.*\),\(.*\))/\2/g')
Phương pháp thay thế (tốt hơn nhưng tối nghĩa hơn)
Nếu bạn nghĩ rằng có bất kỳ cơ hội nào $LATLNG
có thể bắt đầu bằng dấu gạch ngang hoặc nếu bạn muốn trở thành người phạm tội, bạn nên sử dụng printf
thay vì echo
:
printf '%s' "$LATLNG" | sed 's/foo/bar/g'
Hoặc một "tài liệu ở đây", nhưng điều đó có thể hơi khó xử với cấu trúc bạn đang sử dụng:
LAT=$(sed 's/foo/bar/g' <<END
$LATLNG
END
)
Hoặc nếu bạn đang sử dụng bash
và không lo lắng về tính di động, bạn có thể sử dụng "chuỗi ở đây":
sed 's/foo/bar/g' <<< "$LATLNG"