Chỉnh sửa:
Sử dụng yêu cầu mới của bạn:
sed 's/\o47[^\o47]*\o47/\n&\n/g;:a;s/\(\n\o47[^\n]*\)--/\1X-X-X/;ta;s/\n//g' input file
Chỉnh sửa 2:
Đối với một số phiên bản sed
không thích dấu chấm phẩy:
sed -e 's/\o47[^\o47]*\o47/\n&\n/g' -e ':a' -e 's/\(\n\o47[^\n]*\)--/\1X-X-X/' -e 'ta' -e 's/\n//g' inputfile
Nếu bạn sed
cũng không hỗ trợ mã thoát bát phân:
sed -e "s/'[^']*'/\n&\n/g" -e ':a' -e "s/\(\n'[^\n]*\)--/\1X-X-X/" -e 'ta' -e 's/\n//g' inputfile
Câu trả lời gốc:
Bạn thường nên sử dụng các trích dẫn đơn để bao quanh sed
tập lệnh để bạn không phải thoát các ký tự có thể đặc biệt đối với trình bao. Mặc dù trong trường hợp này không cần thiết, đó là một thói quen tốt để phát triển.
sed 's/--/X-X-X/g' inputfile
hoặc là
var="hell --this -- world is --beaut--iful"
newvar=$(echo "$var" | sed 's/--/X-X-X/g')
Không có công cụ g
sửa đổi, việc thay thế được thực hiện trong trận đấu đầu tiên trên mỗi dòng đầu vào. Khi g
được sử dụng, mỗi trận đấu trên mỗi dòng đầu vào được thay thế. Bạn cũng có thể thay thế cho các trận đấu cụ thể:
$ var="hell --this -- world is --beaut--iful"
$ echo "$var" | sed 's/--/X-X-X/2'
hell --this X-X-X world is --beaut--iful