JSON 파일의 텍스트 변경(모든 도구 사용)

JSON 파일의 텍스트 변경(모든 도구 사용)

포트 전달 기능이 있는 VPN을 사용 중이고 전달된 포트를 가져오는 스크립트가 이미 있습니다. 해당 포트를 에서 열지 iptables만 전송 설정 파일을 시작하기 전에 포트가 자동으로 변경되지 않습니다.

내 전송 설정 파일: 다음을 /home/vlastimil/.config/transmission/settings.json포함합니다:

{
    "alt-speed-down": 50,
    "alt-speed-enabled": false,
    "alt-speed-time-begin": 540,
    "alt-speed-time-day": 127,
    "alt-speed-time-enabled": false,
    "alt-speed-time-end": 1020,
    "alt-speed-up": 0,
    "bind-address-ipv4": "0.0.0.0",
    "bind-address-ipv6": "::",
    "blocklist-date": 1591362636,
    "blocklist-enabled": false,
    "blocklist-updates-enabled": true,
    "blocklist-url": "http://list.iblocklist.com/?list=ydxerpxkpcfqjaybcssw&fileformat=p2p&archiveformat=gz",
    "cache-size-mb": 4096,
    "compact-view": false,
    "details-window-height": 1010,
    "details-window-width": 1562,
    "dht-enabled": true,
    "download-dir": "/home/vlastimil/Downloads",
    "download-queue-enabled": false,
    "download-queue-size": 1,
    "encryption": 0,
    "idle-seeding-limit": 30,
    "idle-seeding-limit-enabled": false,
    "incomplete-dir": "/home/vlastimil/Downloads",
    "incomplete-dir-enabled": false,
    "inhibit-desktop-hibernation": true,
    "lpd-enabled": false,
    "main-window-height": 442,
    "main-window-is-maximized": 0,
    "main-window-width": 664,
    "main-window-x": 1256,
    "main-window-y": 570,
    "message-level": 2,
    "open-dialog-dir": "/home/vlastimil/Downloads",
    "peer-congestion-algorithm": "",
    "peer-id-ttl-hours": 6,
    "peer-limit-global": 200,
    "peer-limit-per-torrent": 50,
    "peer-port": 24833,
    "peer-port-random-high": 65535,
    "peer-port-random-low": 49152,
    "peer-port-random-on-start": false,
    "peer-socket-tos": "default",
    "pex-enabled": true,
    "port-forwarding-enabled": false,
    "preallocation": 2,
    "prefetch-enabled": true,
    "queue-stalled-enabled": true,
    "queue-stalled-minutes": 30,
    "ratio-limit": 2,
    "ratio-limit-enabled": false,
    "recent-download-dir-1": "/home/vlastimil/Downloads",
    "recent-download-dir-2": "/home/vlastimil/Downloads/memtest/PRO/torrent",
    "recent-download-dir-3": "/home/vlastimil/Downloads/memtest/Pro",
    "recent-download-dir-4": "/media/vlastimil/4TB_Seagate_NTFS/Movies",
    "rename-partial-files": true,
    "rpc-authentication-required": false,
    "rpc-bind-address": "0.0.0.0",
    "rpc-enabled": true,
    "rpc-host-whitelist": "",
    "rpc-host-whitelist-enabled": true,
    "rpc-password": "{426d7fbcb4015f3821d212e0203d5e20033661141zKMndND",
    "rpc-port": 9091,
    "rpc-url": "/transmission/",
    "rpc-username": "",
    "rpc-whitelist": "127.0.0.1",
    "rpc-whitelist-enabled": true,
    "scrape-paused-torrents-enabled": true,
    "script-torrent-done-enabled": false,
    "script-torrent-done-filename": "/home/vlastimil",
    "seed-queue-enabled": false,
    "seed-queue-size": 10,
    "show-backup-trackers": true,
    "show-extra-peer-details": false,
    "show-filterbar": false,
    "show-notification-area-icon": true,
    "show-options-window": true,
    "show-statusbar": true,
    "show-toolbar": true,
    "show-tracker-scrapes": true,
    "sort-mode": "sort-by-age",
    "sort-reversed": false,
    "speed-limit-down": 2048,
    "speed-limit-down-enabled": false,
    "speed-limit-up": 0,
    "speed-limit-up-enabled": false,
    "start-added-torrents": false,
    "statusbar-stats": "total-transfer",
    "torrent-added-notification-enabled": false,
    "torrent-complete-notification-enabled": false,
    "torrent-complete-sound-command": "canberra-gtk-play -i complete-download -d 'transmission torrent downloaded'",
    "torrent-complete-sound-enabled": false,
    "trash-can-enabled": true,
    "trash-original-torrent-files": false,
    "umask": 18,
    "upload-slots-per-torrent": 14,
    "user-has-given-informed-consent": true,
    "utp-enabled": true,
    "watch-dir": "/home/vlastimil/Downloads",
    "watch-dir-enabled": false
}

41번째 줄에 있는데 기술적으로는 고쳐졌는지 잘 모르겠지만, 이 문제를 위해서 고쳐진 것입니다.


그래서 저는 65535라는 새로운 포트 번호를 갖고 있으며제자리에이전 포트 번호를 변경하십시오.

sedor 를 어떻게 쓰는지는 모르겠지만 awk조금은 있을 것 같지만극도로단순한. 감사해요.

답변1

jq최상위 peer-port키 값을 65535로 업데이트하는 데 사용됩니다 .

file=/home/vlastimil/.config/transmission/settings.json

cp "$file" "$file.tmp" &&
jq '."peer-port" |= 65535' "$file.tmp" >"$file" &&
rm -f "$file.tmp"

새 포트 값과 함께 쉘 변수를 사용하십시오.

newport=65535
file=/home/vlastimil/.config/transmission/settings.json

cp "$file" "$file.tmp" &&
jq --argjson new "$newport" '."peer-port" |= $new' "$file.tmp" >"$file" &&
rm -f "$file.tmp"

jq직접 편집을 할 수 없기 때문에 결과를 원래 이름으로 리디렉션하면서 파일의 임시 복사본에서 실행합니다. 이렇게 하면( jq원본 파일에서 실행하는 대신 새 임시 파일로 리디렉션한 다음 mv이전 파일 위로 새 파일 이동을 사용하여) 원본 파일의 메타데이터(예: 소유권 및 권한)가 보존됩니다.

예를 들어, 쉘 변수의 값이 $newport숫자가 아닌 경우 등 문제가 발생하면 임시 파일은 삭제되지 않고 수정되지 않은 문서가 저장됩니다.

답변2

사용 sed:

sed -i 's/"peer-port": 12345/"peer-port": 65535/' settings.json

관련 정보