Tôi đang cố gắng chỉnh sửa tệp nginx.conf của mình bằng lập trình, trong đó có một dòng như thế này:
access_log /var/log/nginx/access.log;
mà tôi muốn trông như thế này:
access_log /dev/stdout;
Tôi tin rằng regex ^\s*access_log([^;]*);
sẽ chụp /var/log/nginx/access.log
phần trong nhóm chụp, nhưng tôi không chắc làm thế nào để thay thế chính xác nhóm chụp bằng sed?
Tôi đã thử
echo " access_log /var/log/nginx/access.log;" | sed 's/^\s*access_log([^;]*);/\1\\\/dev\\\/stdout/'
nhưng tôi đang nhận được lỗi:
sed: -e expression #1, char 45: invalid reference \1 on `s' command's RHS
Nếu tôi thử sed -r
thì không có lỗi, nhưng đầu ra không như tôi mong đợi:
/var/log/nginx/access.log\/dev\/stdout
Tôi đang cố gắng trở nên thông minh với nhóm chụp và không chú ý và không tìm kiếm trực tiếp "access_log /var/log/nginx/access.log;" trong trường hợp phân phối thay đổi vị trí tệp nhật ký mặc định.
sed '/access_log/s|/[^;]\+|/dev/stdout|'