특정 문자열을 바꾸는 방법은 무엇입니까?

특정 문자열을 바꾸는 방법은 무엇입니까?

내 텍스트 파일의 예:

03/Oct/2016:06:39:50-0500,cd/base/0/48/2.png,206,1514
03/Oct/2016:06:39:50-0500,cd/base/1/46/3.png,206,5796
03/Oct/2016:06:39:50-0500,cd/base/2/45/4.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/3/46/78.png,200,7208
03/Oct/2016:06:39:50-0500,cd/base/4/45/43.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/5/46/8.png,200,7208
...

base/이 기사에서는 다음 규칙에 따라 숫자를 바꿔야 합니다 .

if that_number=0 then that_number=5
if that_number=1 then that_number=6
if that_number=2 then that_number=7
if that_number=3 then that_number=8
if that_number=4 then that_number=9
if that_number=5 then that_number=10

원하는 결과:

03/Oct/2016:06:39:50-0500,cd/base/5/48/2.png,206,1514
03/Oct/2016:06:39:50-0500,cd/base/6/46/3.png,206,5796
03/Oct/2016:06:39:50-0500,cd/base/7/45/4.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/8/46/78.png,200,7208
03/Oct/2016:06:39:50-0500,cd/base/9/45/43.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/10/46/8.png,200,7208

어떻게 할 수 있는지 아시나요?

답변1

Perl에서는 컨텍스트를 일치시키는 것이 쉽습니다.그리고추가를 하세요:

perl -pe 's,base/\K\d+,$& + 5,e' input_file

첫 번째 부분(until)을 잊어버리고 형식의 모든 항목을 일치시키고 나머지 부분을 일치하는 항목( )에 5를 더한 항목으로 바꿉니다. 단순한 문자열이 아닌 Perl 표현식으로 대체하십시오.base/<numbers>\K$&e

답변2

awk+5모든 번호에서 작동한다는 사실을 활용할 수 있습니다 .

awk -F'/' '{$5+=5 ; print}' OFS='/' input_file

입력( ) 및 출력( ) 각각에 대한 필드 구분 기호로 사용되는 경우 /필드 번호 5에 5를 추가해야 합니다.-F'/'OFS='/')

여기서는 슬래시의 위치와 개수가 중요합니다.

답변3

sed작동합니다:

sed \
    -e 's/base\/1/base\/6/' \
    -e 's/base\/2/base\/7/' \
    -e 's/base\/3/base\/8/' \
    -e 's/base\/4/base\/9/' \
    -e 's/base\/5/base\/10/' \
    -e 's/base\/0/base\/5/'

내 생각에는 "base/0" 사례를 끝에 넣어야 한다고 생각합니다. 그렇지 않으면 5 -> 10 사례도 시작됩니다.

관련 정보