특정 패턴에 따라 sed 또는 awk를 사용하여 특정 열을 수정하는 방법

특정 패턴에 따라 sed 또는 awk를 사용하여 특정 열을 수정하는 방법

다음과 같은 CSV 파일이 있습니다.

c1,c2,c3,http://aaa.com/blblbblb\nhttp://bbb.com/sdsdsds\nhttp://ccc.com\nhttp://foo.com/ghghghgh

cc1,cc2,cc3,http://eee.com/blblbblb\nhttp://foo.com/sdsdsds\nhttp://fff.com\nhttp://ttt.com/ghghghgh

ccc1,ccc2,ccc3,http://foo.com/blblbblb\nhttp://vvv.com/sdsdsds\nhttp://foo.com/nmnmnmnm\nhttp://qqq.com\nhttp://kkk.com/ghghghgh

csv 파일 위를 조작하고 다음과 같이 내보낼 수 있습니까? ( sed또는 awk유사한 bash 명령 사용)

c1,c2,c3,http://foo.com/ghghghgh 

cc1,cc2,cc3,http://foo.com/sdsdsds

ccc1,ccc2,ccc3,http://foo.com/blblbblb;http://foo.com/nmnmnmnm

실제로는 4번째 열과 Remain 패턴만 조작하고 싶습니다 http://foo.com/{some string}(즉, foo.com 도메인이 포함된 경우 4번째 열에서 링크를 추출합니다).

답변1

sed '
    s|http://foo.com|@|g #replace `foo.com` domain with rare symbol
    /./s/\\n\|$/;/g      #replace `\n` by `;`  and add it to end 
    s/http[^@]*;//g      #remove all domain(s) without `foo.com`
    s|@|http://foo.com|g #place `foo.com` back
    s/;$//               #remove `;` from the end of line
    ' csv.file

답변2

다음을 수행할 수 있습니다.

cat your_csv.csv | sed 's/\\n/,/g' | cut -d ',' -f 4

sed\n구분 기호가 다음과 같으면 모든 s를 로 변경하고 ,4 cut번째 필드를 선택합니다.,

관련 정보