문자열을 다른 문자열로 교체

문자열을 다른 문자열로 교체

csv 파일에서 시작되는 행

14/Feb/2016:15:21:33-0500]http://map1.link.de/mk

교체/제거 및 추가가 가장 쉬운 부품은 무엇입니까?

]http://map1.link.de/

그리고

,

map어떤 숫자든 가능하다는 점을 기억하세요map1, map2, map3

몇 줄의 예:

14/Feb/2016:15:21:33-0500]http://map1.link.de/mk
14/Feb/2016:16:21:33-0500]http://map5.link.de/mk

최종 결과

14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk

답변1

나는 다음을 사용할 것이다 sed:

sed 's/\(.*\)].*\/\(.*$\)/\1,\2/' csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk

csv이 파일은 어디에 있습니까:

cat csv 
14/Feb/2016:15:21:33-0500]http://map1.link.de/mk
14/Feb/2016:16:21:33-0500]http://map5.link.de/mk


설명:
\(.*\)]= 검색 및구하다첫 번째 [
.*\/=까지 각 문자 다음에 검색 - 실행아니요저장 - 끝까지 모두 /
\(.*$\)=구하다그 이후 줄 끝까지 ( mk)
\1,\2= 우리가 저장한 내용으로 대체되고 사이에 쉼표를 추가합니다.

답변2

다음과 같이 확장 [0-9]\{1,\}정규식 연산자를 사용하여 POSIXly 또는 이식성이 떨어지는 하나 이상의 십진수 시퀀스를 나타낼 수 있습니다.+[0-9]+

sed 's@]http://map[0-9]\{1,\}\.link\.de/@,@' file.csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk

또는

sed -E 's@]http://map[0-9]+\.link\.de/@,@' file.csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk

바꾸고 싶다면어느URI(정규화된 호스트 이름이 일치하는 URI뿐만 아니라 map?.link.de)를 사용하면 후자를 다음과 같이 단순화할 수 있습니다.

$ sed -E 's@]http://[^/]*/@,@' file.csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk

관련 정보