2013-07-08 3 views
0

쉘 스크립트가있는 자동 설치 프로그램에 sed를 사용하고 있습니다. 내가 지난 인용하기 전에 단어를 추가하기 위해 노력하고있어, 규칙은 다음과 같습니다큰 따옴표가 마지막으로 나오기 전에 단어 추가

  • 때문에 변수의 첫 번째 인수에 따옴표가 있어야는
  • 마지막 인용 전에 단어는
  • 내가 가진 솔루션을 선호 알 수 나오지도 명령

파일 :

values="word anotherword anyword foo" 

스크립트 :

#!/bin/sh 
wordtoadd="bar"; 
sed -i "s/^values=\(*.\)\"/\1$wordtoadd\"/" filetomodify.txt; 

원하는 결과 :

values="word anotherword anyword foo bar" 

답변

1

한 가지 방법 : values=로 시작하는 라인을 발견하면

sed '/^values=/s/\([^"]*\)"$/\1 '"$wordtoadd"'"/' input 

어떤이, 비 인용 문자의 시리즈의 가장 긴 일치 (대체 [^"])에 이어 견적과 wordtoend과 일치하는 줄 끝 ("$)과 따옴표 (\1 '"$wordtoadd"'")를 붙입니다.

.을 정량화하려면 sed 표현식에서 \(*.\)\(.*\)이어야합니다. 그리고 대체 할 때 value= 부분을 다시 넣어야합니다.

+0

타이가, 내가 제안 :) 내 나오지도 명령을 수정,^(특별?, $ 및 [명령 구문을 더 잘 설명 할 수 잘 작동 "] *) – Lyoneel

+1

@Lyoneel, 약간의 설명이 추가되었습니다. – perreal

0

이 당신을 위해 작동 할 수 있습니다 (GNU 나오지도) :

sed -r 's/(.*)"/\1'"$wordtoadd"'"/' file 
관련 문제