섹션으로 나누어진 텍스트 파일이 있습니다. 각 섹션은 [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
후자는 ruby
1개의 문자 수정 후에 작동합니다.
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
약어를 사용하면 덜 고통스러울 수 있습니다.