직렬 델타 SED oneliner로 명명됨

직렬 델타 SED oneliner로 명명됨

명명된 시퀀스를 추가해야 하며 이를 위해 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

관련 정보