여기에 다음 데이터가 포함된 CSV 파일이 있습니다.
1,2,CC-12345678-20201120,6
1,3,CC-87654321-20201110,5
"CC-" 뒤의 특정 문자열을 마지막 4자리로 바꿔야 합니다.
예상 출력:
1,2,CC-5678-20201120,6
1,3,CC-4321-20201110,5
awk나 sed를 사용하려고 합니다. 감사해요
답변1
그리고sed
sed 's/CC-[^-]*\([^-]\{4\}\)/CC-\1/' file
또는 가독성을 높이려면 확장 정규식을 사용하세요.
sed -E 's/CC-[^-]*([^-]{4})/CC-\1/' file
그러면 s
대시가 아닌 마지막 4개 문자와 대시가 아닌 문자의 후속 숫자가 바뀌고 그 뒤에 로 표시한 4개의 문자가 대체됩니다.CC-
[^-]*
[^-]\{4\}
CC-
\(\)
답변2
사용sed
$ sed 's/\([^-]*-\)[0-9]\+\([0-9]\{4\}\)/\1\2/' input_file
1,2,CC-5678-20201120,6
1,3,CC-4321-20201110,5
답변3
그리고 awk
:
awk -F- -v OFS=- '$1~/,CC$/{$2=substr($2, length($2)-3)}1' file
문자열을 분할한 다음 -
첫 번째 필드가 원하는 패턴( )으로 끝나는 경우 ,CC
마지막 4자를 가져옵니다 . 모든 줄을 인쇄합니다( 1
).