텍스트 파일 섹션에 2줄 추가

텍스트 파일 섹션에 2줄 추가

섹션으로 나누어진 텍스트 파일이 있습니다. 각 섹션은 [keyword]로 시작하고 빈 줄로 끝납니다. 이 같은:

[keyword1]
param1 = value1
param2 = value2
param3 = value3

[keyword2]
param4 = value4
param5 = value5
...

주어진 [keyword].

param = value

sed만약을 대비해 내부 편집과 파일 백업 복사본을 사용하는 것을 고려하고 있습니다 .

답변1

예, sed올바른 선택인 것 같습니다.

sed -i.bak '/^\[keyword1\]/aparam = value\nparam = other' your.file

awk내부 편집 부분을 제외하고는 수행할 수 있습니다.

awk '1;/^\[keyword1\]/{print"param = value";print"param = other"}' your.file > new.file

perl다음과 같은 작은 작업에 큰 총을 사용해도 괜찮다면 :

perl -i.bak -pe '$_.="param = value\nparam = other\n"if/^\[keyword1\]/' your.file

후자는 ruby1개의 문자 수정 후에 작동합니다.

ruby -i.bak -pe '$_+="param = value\nparam = other\n"if/^\[keyword1\]/' your.file

python해결책은 약간 길다(아마 나의 약한 지식으로 인해 악화되었을 것이다):

python -c 'import sys,fileinput;[sys.stdout.write(line+("param = value\nparam = other\n" if line=="[keyword1]\n" else "")) for line in fileinput.input(inplace=1,backup=".bak")]' your.file

이번에도 내부 편집은 불가능하지만 다음 bash과 같이 ksh하는 것도 가능합니다.

while IFS='' read -r line; do
  echo "$line"
  [[ "$line" == '[keyword1]' ]] && {
    echo "param = value"
    echo "param = other"
  }
done < your.file > new.file

내부 ed편집은 쉽지만 백업을 만드는 방법을 모르겠습니다.

ed -s your.file <<< $'/^\[keyword1\]/a\nparam = value\nparam = other\n.\nwq'

답변2

편집기로 사용하는 경우 다음과 같이 vim약어를 설정할 수 있습니다..vimrc

:abbr key1 [keyword1]^M^Iparam1 = value1^M^Iparam2 = value2^M^Iparam3 = value3^M
:abbr key2 [keyword2]^M^Iparam4 = value4^M^Iparam5 = value5^M

이제 어떤 파일에서든 삽입 모드에서 입력한 key1다음 를 누르면 enter다음이 표시됩니다.

[keyword1]
       param1 = value1
       param2 = value2
       param3 = value3

이것이 반복해서 수행되는 경우 vim약어를 사용하면 덜 고통스러울 수 있습니다.

관련 정보