[REDIS] xargs를 변수에 나오지도 사용 쉘 확장 내부에서 작동하지 않습니다
REDISxargs를 변수에 나오지도 사용 쉘 확장 내부에서 작동하지 않습니다
나는 각 키 이름에 대한 교체가 나오지 셸을 사용하여, 레디 스에 배치 키의 이름 변경을 시도하고있다. (내부적으로 레디 스에서이 작업을 수행하는 더 나은 방법이있을 것 같지 않습니다).
redis-cli -n 5 KEYS "*::staging::*"| xargs -I {} echo "RENAME {} $(echo {} | sed 's/staging/development/g')"
# Then pipe this command into redis-cli when working
이 같은 출력을 기대하고있다 : "RENAME은 레디 스 :: 준비 :: 키 레디 스 :: 개발 :: 키"
대신 난 그냥이 얻을 : "RENAME은 레디 스 :: 준비 :: 키 레디 스 :: 준비 :: 키를"
에코 {} $ (에코 {} | 나오지도의 / 기존 / 신규 / ') 나를 걸려 것입니다 ... 한 사람이 어떻게 제대로 xargs를 출력을 복용 달성하고 원본과 그의 편집 된 버전을 모두 에코는 무엇입니까? $은 (에코 {} | 나오지도) 잘 작동 하는가? (그렇다면, 어떻게 제대로 할 수 있습니까?)
해결법
-
==============================
1.자체 나오지도 모두 수정되지 않은 및 수정 된 라인을 생성 할 수 있습니다 :
자체 나오지도 모두 수정되지 않은 및 수정 된 라인을 생성 할 수 있습니다 :
$ echo "redis::staging::key" | sed 's/^/RENAME /; p; s/staging/development/g' RENAME redis::staging::key RENAME redis::development::key
상기에서, 첫번째 행의 시작에 RENAME 문자열을 추가 sed는. 그런 다음 p 명령은 (여전히에서 "준비"로) 그 당시의 약자로 선을 인쇄 나오지도 알려줍니다. 다음 대체 "개발"에두고 다음 버전도 인쇄됩니다.
업데이트 : 우리가 한 줄에 출력을 원하는 가정하자 :
$ echo "redis::staging::key" | sed 's/.*/RENAME & &/; s/staging/development/2' RENAME redis::staging::key redis::development::key
첫 번째의 위 명령을 처음으로 이름 바꾸기를 추가하고, 행을 두 배로. 두 번째는 개발 준비의 두 번째 발생을 대체합니다.
xargs -I {} echo "RENAME {} $(echo {} | sed 's/staging/development/g')"
xargs를이 실행 전에 배쉬는 문자열을 처리합니다. 특히,이 $ 본다 (에코 {} | 나오지도의 / 준비 / 개발 / g ')하고 ( "명령 대체를")를 실행하고 결과를 얻을 수 {}. xargs를 마지막으로 실행될 때 그래서, 그것은 명령 본다 :
xargs -I {} echo "RENAME {} {}"
결과적으로, S / 준비 / 개발 / g 대체 IS하지 않았다.
이것에 대한 수정이 있습니다 :
$ echo "redis::staging::key" | xargs -I {} sh -c 'echo RENAME {} $(echo {} | sed 's/staging/development/g')' RENAME redis::staging::key redis::development::key
위의 작은 따옴표 안에두고 bash는 명령과는 쉬에 인수로 전달합니다. xargs를 후 치환했다까지이 방법으로, 문자열은 쉘에 의해 처리되지 않는다.
from https://stackoverflow.com/questions/21636184/using-sed-on-xargs-variable-isnt-working-inside-shell-expansion by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 봇에 대한 Laravel 세션 없다 (0) | 2020.01.17 |
---|---|
[REDIS] 파이썬 / PIL을 사용하여 레디 스에 이미지를 저장하는 방법 (0) | 2020.01.17 |
[REDIS] 선택, epoll에, kqueue, 그리고 evport 사이의 근본적인 차이점은 무엇입니까? (0) | 2020.01.17 |
[REDIS] nodejs와 레디 스 (node_redis)에 가입 게시 (0) | 2020.01.17 |
[REDIS] 어떻게 레디 스 해시에서 핵심 패턴을 검색하려면? (0) | 2020.01.17 |