특정 텍스트 파일을 편집하고 싶습니다.
dd.mm.yyyy, hh:mm/s-show/...
dd.mm.yyyy, hh:mm/s-show/...
dd.mm.yyyy,/s-show/...
여기서 /s-show/는 각 줄에 있고 그 뒤에 임의의 문자 "..."가 옵니다.
두 가지 상황이 있습니다.
한 줄은 "dd.mm.yyyy" 형식의 날짜로 시작하고, 쉼표와 공백, "hh:mm" 형식의 시간, 마지막으로 /s-show/...를 차례로 입력합니다.
한 줄은 날짜만으로 시작하고 그 뒤에 쉼표가 오고 바로 /s-show/...가 옵니다.
각 줄은 다음과 같이 편집되어야 합니다:
첫 번째 경우 hh:mm 뒤에 공백 3개를 입력하고(줄이 날짜와 시간으로 시작하는 경우) 두 번째 경우에는 쉼표 뒤에 공백 3개를 입력하고(결과가 날짜로만 시작하는 경우) 동일한 문자열 "을 추가합니다. /s-show/ 앞의 https://www.test.com"
/s-show/는 링크의 일부이며 왼쪽의 "https://www.test.com"으로 보완되어야 유효한 링크가 됩니다.
따라서 각 행의 결과는 다음과 같아야 합니다.
dd.mm.yyyy, hh:mm https:/www.test.com/s-show/...
dd.mm.yyyy, hh:mm https:/www.test.com/s-show/...
dd.mm.yyyy, https:/www.test.com/s-show/...
이것이 어떻게 가능한지? 추가적인 이점은 링크가 동일한 장소에서 시작된다는 점입니다. 따라서 첫 번째 경우에는 3칸이고, 두 번째 경우에는 9칸입니다.
답변1
이 답변에서는 날짜(및 시간) 뒤의 텍스트가 항상 고정 문자열로 시작한다고 가정합니다 /s-show/
.
sed -e 's#^\([^/]\{17\}\)\(/s-show/\)#\1 https:/www.test.com\2#' -e 's#^\([^/]\{11\}\)\(/s-show/\)#\1 https:/www.test.com\2#' inputfile > outputfile
설명하다:
스크립트는 날짜나 시간을 확인하지 않으며 /
줄 시작 부분과 다른 17자(또는 11자)가 필요하고 /s-show/
캡처된 그룹 사이에 필요한 수의 공백을 삽입합니다.https:/www.test.com
참고: sed
교체( ) 명령에서는 패턴에서 슬래시가 이스케이프되는 것을 방지하기 위해 일반적인 구분 기호 대신 s
구분 기호를 사용합니다 .#
/
시험:
echo 'dd.mm.yyyy, hh:mm/s-show/...
dd.mm.yyyy, hh:mm/s-show/...
dd.mm.yyyy,/s-show/...' | sed -e 's#^\([^/]\{17\}\)\(/s-show/\)#\1 https:/www.test.com\2#' -e 's#^\([^/]\{11\}\)\(/s-show/\)#\1 https:/www.test.com\2#'
인쇄
dd.mm.yyyy, hh:mm https:/www.test.com/s-show/...
dd.mm.yyyy, hh:mm https:/www.test.com/s-show/...
dd.mm.yyyy, https:/www.test.com/s-show/...
답변2
Perl은 다음과 같은 경우에 편리합니다.
perl -pe 's{([^/]+)}{ sprintf "%-17s https://www.test.com", $1 }e' file