sed 명령을 사용하여 날짜와 IP가 포함된 문자열을 바꾸는 방법

sed 명령을 사용하여 날짜와 IP가 포함된 문자열을 바꾸는 방법

IP 주소와 날짜를 포함하여 다음 문자열이 있습니다. 보안상의 이유로 IP 주소의 처음 두 자리를 숨겨야 합니다.

text 200.200.10.2   2022.05.07 15:32:43 other texts

다음 명령을 실행했지만 2022.05.07교체되었습니다.

echo "text 200.200.10.2   2022.05.07 15:32:43 other texts"|sed -e 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\./IP./g'
text IP.10.2   2IP.07 15:32:43 other texts

나는 단지 변화하고 싶다 200.200.10.2.

답변1

g플래그는 "이 줄에 있는 문자열의 모든 항목을 대체합니다"를 의미합니다. 첫 번째 항목만 바꾸려면 다음을 제거하세요 g.

$ echo "text 200.200.10.2   2022.05.07 15:32:43 other texts" | 
    sed 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\./IP./'
text IP.10.2   2022.05.07 15:32:43 other texts

물론 세부 사항은 수행하려는 작업에 따라 다릅니다. 위의 명령도 999.999.whatever로 대체되므로 IP.whatever정확히 4개의 숫자 세트가 있는 경우에만 이 작업을 수행하고 싶을 수도 있습니다.

$ echo "1.2.3 text 200.200.10.2   2022.05.07 15:32:43 other texts" | 
    sed -E 's/([0-9]{1,3}\.){2}([0-9]{1,3}\.[0-9]{1,3})/IP.\2/'
1.2.3 text IP.10.2   2022.05.07 15:32:43 other texts

하지만 이것도 일치합니다 1.12.123.1234567890. 따라서 공백이나 줄 끝이 뒤따르는 마지막 숫자 집합만 일치시키고 싶을 수도 있습니다.

$ echo "1.2.3 text 200.200.10.2   2022.05.07 15:32:43 other texts" | 
    sed -E 's/([0-9]{1,3}\.){2}([0-9]{1,3}\.[0-9]{1,3}([[:blank:]]|$))/IP./'
1.2.3 text IP.  2022.05.07 15:32:43 other texts

관련 정보