명명된 시퀀스를 추가해야 하며 이를 위해 sed를 사용하고 싶습니다. 이것이 내가 하는 방법이다:
echo 2015092315 | gsed s/20[0-9][0-9][0-9][0-9]*/`date +%Y%m%d%H`/g
그러나 나는 영역 파일 업데이트가 한 시간에 한 번 이상 발생할 수 있으며 위의 것만으로는 충분하지 않다는 것을 깨달았습니다.
이제 시퀀스 번호를 1씩 늘리고 싶습니다. 수행하는 방법? 나는 이것을 생각해 냈습니다.
gsed 's/20[0-9][0-9][0-9][0-9]*/expr & + 1/e'
작동하지만 줄의 시작 부분(공백)과 줄의 끝 부분(주석)을 제거하고 내가 원하지 않는 주석(sh: serial: 찾을 수 없음)에 대한 오류를 표시합니다.
답변1
Perl이 구조에 옵니다:
perl -pe 's/(20[0-9]{3,})/$1+1/e' file
답변2
원래 질문과 choroba의 답변을 결합하면 GNU를 사용하여 다음 줄을 얻을 수 있습니다 sed
.
sed -r 's/(20[0-9]{3,8})(.*$)/echo `expr \1 + 1` "\2"/e'
다음과 같이 사용할 수 있습니다.
[admin@localhost ~]$ echo '2015092315 ; serial' | sed -r 's/(20[0-9]{3,8})(.*$)/echo `expr \1 + 1` "\2"/e'
2015092316 ; serial
또는 파일에:
[admin@localhost ~]$ sed -i -r 's/(20[0-9]{3,8})(.*$)/echo `expr \1 + 1` "\2"/e' /path/to/zone_file