sed : 첫 번째 숫자 범위 만 교체


4

다음과 같은 입력 파일이 있다고 상상해보십시오.

INSERT INTO video_item_theme VALUES('9', '29');
INSERT INTO video_item_theme VALUES('19', '312');
INSERT INTO video_item_theme VALUES('414', '1');

그리고 첫 번째 범위에만 10000을 더하고 싶습니다. 그래서 다음과 같이 끝납니다.

INSERT INTO video_item_theme VALUES('10009', '29');
INSERT INTO video_item_theme VALUES('10019', '312');
INSERT INTO video_item_theme VALUES('10414', '1');

내 접근 방식은 "1000"을 한 자리 숫자, "100"으로 시작하는 것입니다.

sed 's/[0-9]\{2\}/10&/g' 

... 첫 번째 숫자뿐만 아니라 두 숫자의 각 발생을 변경하기 때문에별로 도움이되지 않습니다.

INSERT INTO video_item_theme VALUES('9', '10029');
INSERT INTO video_item_theme VALUES('10019', '100312');
INSERT INTO video_item_theme VALUES('100414', '1');

답변:



1

나는 하나의 명령으로 그것을하는 우아한 방법이 있는지 모르겠지만 (그리고 그렇게 생각하지는 않습니다), 숫자 길이 당 하나의 명령으로 쉽게 할 수 있습니다 :

sed -e "s/'\([0-9]\{1\}\)',/\'1000\1\',/g"
sed -e "s/'\([0-9]\{2\}\)',/\'100\1\',/g"
sed -e "s/'\([0-9]\{3\}\)',/\'10\1\',/g"

원하는 숫자 만 변경하는 요령은 패턴에 컨텍스트 (예 : 작은 따옴표와 쉼표)를 포함시켜 패턴이 문자열에서 고유하도록하는 것입니다.

각 명령의 결과는 다음과 같습니다.

$ sed -e "s/'\([0-9]\{1\}\)',/\'1000\1\',/g" test
INSERT INTO video_item_theme VALUES('10009', '29');
INSERT INTO video_item_theme VALUES('19', '312');
INSERT INTO video_item_theme VALUES('414', '1');

$ sed -e "s/'\([0-9]\{2\}\)',/\'100\1\',/g" test
INSERT INTO video_item_theme VALUES('9', '29');
INSERT INTO video_item_theme VALUES('10019', '312');
INSERT INTO video_item_theme VALUES('414', '1');

$ sed -e "s/'\([0-9]\{3\}\)',/\'10\1\',/g" test
INSERT INTO video_item_theme VALUES('9', '29');
INSERT INTO video_item_theme VALUES('19', '312');
INSERT INTO video_item_theme VALUES('10414', '1');

나를 바보라고 부르십시오. 그러나 그것은 나를 가져옵니다. INSERT INTO video_item_theme VALUES ( '9', '10029'); INSERT INTO video_item_theme VALUES ( '10019', '100312'); INSERT INTO video_item_theme VALUES ( '100414', '1');
Marit Hoen

어쩌면 구문 문제 일 수 있습니다. 나는 내 대답을 업데이트하고 그것을 테스트, 나는 당신이 원하는 결과가
m4573r

그럼 대답을 자유롭게 확인하십시오;)
m4573r

0

Ansgar Wiechers 와 동일한 솔루션 이지만 다음과 perl같습니다.

perl -F\' -lane '$F[1] += 10000; print join "\047", @F' infile
  • -a로 자동 분할 @F에서 '.
  • -n 각 줄을 반복합니다.

참조하십시오 perlrun(1).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.