2017-04-09 1 views
0

VAR = ABC의 CDE의 FGH의 IJK는공간 문제를 사용하여 SED 명령

나는 inbetween 오류 아래

sed: -e expression #1, char 32: unterminated `s' command 

때문에 "ABC의 CDE의 FGH의 IJK"을 받고 명령

sed -i '$s/}/,\n"filename":"'$var'/g"}/' 

아래 가진 공간을 실행 한 캐릭터 라인 치

예상 출력은 인쇄하는 것입니다 : ABC의 CDE의 FGH의 IJK

감사

+0

입력 내용에'}'이 없으므로's /}/... '이 (가) 무엇을 할 것으로 기대합니까? 실제 데이터가 실제로 우리에게 보여준 샘플처럼 보이지 않는 것처럼 느껴질 때 명확하고 더 정확한 대표 샘플 입력 및 예상 출력을 제공하는 질문. –

+0

JSON 값을 수정하려면'sed '를 빼고'jq'와 같은 도구를 사용하십시오. 답장을 보내 주셔서 감사합니다. – chepner

답변

0

이 시도 -

$cat f 
Hello vipin 
$var="abc cde fgh ijk" 
$sed "s/Hello/$var/g" f 
abc cde fgh ijk vipin 
+0

변수 이름 filename에 var 값을 가져 오려고했습니다. 그래서 나는 아래의 명령으로 시도했다. $ sed -i '$ s /} /, \ n "파일 이름": "'$ var/g '"} /'파일.json sed : -e expression # 1, char 23 : 끝내지 않은's '명령 동일한 오류가 발생했습니다. –

+0

var (abc cde fgh ijk)를 공백으로 읽으려고하지만/gi를 사용하면 동일한 오류가 발생합니다. –

+0

이것을 시도해보십시오 -'sed -i "s /} /, \ n filename : $ var/g"file.txt' –

0

변경 "$var"-$var. 그렇지 않으면 var의 공간이 arg 분리 기호로 bash에 표시되어 sed "프로그램"을 종료합니다.

+0

만약 내가 ""를 사용했다면 ""문자열을 취하고 $ var처럼 인쇄하지만 abc cde fgh ijk –

0

여기에 몇 가지 문제가 있습니다. 첫째, 네, 따옴표로 묶지 않으므로 공백은 sed입니다. 그런 다음 g}/에 구문 오류가 있습니다. 예를 들어

s/original/replacement/options 

: 대체 연산자의 구문은

s/foo/bar/g 

하지만 당신은 사용 :

s/foo/bar/g"}/ 

어떤 경우에는, 당신은 마지막 줄에 여러 }이없는 경우 파일의 크기가 g 인 것은 의미가 없습니다.

그래서, 당신이 실제로 무엇을하려고에 따라, 당신이 중 하나 (UI는 교체 원본 파일 수정하기 위해, 출력을 보여 다시 추가 할 수 -i를 제거한) 원하는 :

$ cat file 
foo 
bar} 
$ sed '$s/}/,\n"filename":"'"$var\"\}/" file 
foo 
bar, 
"filename":"abc cde fgh ijk"} 

:

또는 물론

$ cat file 
foo 
bar}}} 
$ sed '$s/}/,\n"filename":"'"$var\"\}/g" file 
foo 
bar, 
"filename":"abc cde fgh ijk"}, 
"filename":"abc cde fgh ijk"}, 
"filename":"abc cde fgh ijk"} 

는 훨씬 간단 접근 방식은 전체 목표 교체, 시세 및 모든를 개최 var를 설정하는 것입니다

큰 따옴표를 사용 했으므로 sed 표현의 $을 이스케이프 처리해야합니다.

+0

을 인쇄 해 주셔서 감사합니다. 여기에 json 파일의 이 있습니다. VAR = ABC의 CDE FGH의 IJK example.json { "의 ETag": "\"c489228521fa35447XXXXXXXX \ "", "메타 데이터": {} } 쿼리 :/$ s에 '-i 나오지} /, \ n "파일 이름" { "의 ETag": "\"c489228521fa35447XXXXXXXX \ "", "메타 데이터": {}, " '$ var에'를"}/' 예상 출력을 example.json"파일 이름": "abc cde fgh ijk" 과 같은 오류가 표시되지만 sed : -e 표현식 # 1, char 19 : 종료되지 않은's '명령문 –