다음에 추가

다음에 추가

다음과 같은 줄이 포함된 test.txt 파일이 있습니다.

values =  abc, def, dfg, ert, sdf, sfd, sdf   

test,txt의 값에 새로운 쉼표로 구분된 값을 추가하기 위해 쉘 스크립트를 사용하고 있습니다.

예를 들어, 나는 필요하다다음에 추가test.txt의 "ghf":

values =  abc, def, dfg, ert, sdf, sfd, sdf, ghf   

값도 제거해야 합니다.

예를 들어, 내가 필요한 경우제거하다test.txt의 "ert":

values =  abc, def, dfg, sdf, sfd, sdf, ghf   

쉘 스크립트에서 이를 어떻게 달성할 수 있습니까?

(즉)

내가 주면

echo "abc" >> test.txt

파일 끝에 "abc"를 추가할 수 있지만 test.txt의 "values=" 필드에 추가해야 합니다.

고마워,
해리

답변1

극단적인 상황에 대비하지 않고 빠른 솔루션을 제공합니다.
(감사해요글렌 잭맨최적화 에 사용됩니다 sed. )

다음에 추가

sed -i "/^values = / s/$/, ${NEW_VALUE}/" test.txt

설명하다

sed -i- 로 인쇄하지 않고 지정된 파일을 변경합니다 stdout.

/^values = /- sed로 시작하는 줄에 있을 때 values =.

s/$/, ${NEW_VALUE}/- , ${NEW_VALUE}줄 끝에 추가됩니다.

test.txtsed-작업이 수행될 파일입니다.

제거하다

sed -i "/^values = / s/ ${REMOVE_VALUE},\?//" test.txt

설명하다

s/ ${REMOVE_VALUE},\?//- 첫 번째 항목 ${REMOVE_VALUE}과 선택적 후속 항목을 제거합니다 ,.

이 솔루션의 문제점

  1. 첫 번째 값을 추가하면 ,즉시 추가됩니다.values =
  2. 마지막 값을 제거하면 .로 끝나는 줄이 남습니다 ,.
  3. 추가/제거된 변수에 명령 sed의 구분 기호 s(예제에서는 해당 /)가 포함되어 있으면 명령이 작동하지 않습니다.

답변2

사용하면 ed다음을 수행할 수 있습니다.

ed -s test.txt <<<$'/values/s/$/,ghf\nw'   # add ghf to the end of line

그리고

ed -s values <<<$'/values/s/ert,//\nw'  # remove ert

관련 정보