매우 간단한 형식의 쉼표로 구분된 목록이 있습니다.
IPrangestart,IPrangeend,int number,date (delimited by slashes),Name (is dirty, contains spaces, dots, dashes, quotemarks etc)
처음 세 열은 비워둘 수 없습니다. 나는 이것을 대시로 구분된 난수를 나타내는 표준 방화벽 차단 가능 형식으로 변환하고 싶습니다.
IPrangestart-IPrangend
때로는 필드가 비어 있습니다. 수천 개의 행에 대해 이 작업을 수행하는 가장 빠르고 현명한 방법은 무엇입니까? 각 문자에 대해 [A-Za-z] 및 각 숫자에 대해 [0-9]와 같은 정규식을 시도했지만 무작위 " . 및 위에 지정된 유사한 항목의 문제는 해결되지 않았습니다.
이 정규식을 시도했지만 대시 사이의 대시를 인식하는 방법을 모르겠습니다.(\b25[0-5]|\b2[0-4][0-9]|\b[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}
답변1
ip와 관련된 열이 항상 존재하는 경우(귀하의 의견에 따라) cut
처음 두 개의 쉼표로 구분된 열을 유지하고 다음 ,
으로 바꾸십시오 -
.
cut -d, -f1,2 --output-delimiter=-
GNU cut
어떤 이유로 from 에 액세스할 수 없는 경우 coreutils
(질문에 를 태그했기 때문에 의심스럽습니다 linux
) 다음 옵션을 놓칠 수 있습니다 --output-delimiter = -
.
sed 's/^\([^,]*\),([^,]*).*/\1-\2/' file
답변2
awk -F "," 'BEGIN{OFS="-"}{print $1,$2}' File
산출
IPrangestart-IPrangeend