csv 파일에 필요한 데이터에 맞지 않는 행이 여러 개 있습니다. 예를 들어 다음은 example.csv 파일입니다.
14/Feb/2016:13:21:33-0500,mk
15/Feb/2016:14:21:33-0500,mk
16/Feb/2016:15:21:33-0500]http://map1.link.de/mk
17/Feb/2016:16:21:33-0500]http://map5.link.de/mk
다음을 사용하여 행을 가져오고 수정할 수 있습니다.
$ cat example.csv | grep "map" | sed 's/\(.*\)].*\/\(.*$\)/\1,\2/'
결과:
16/Feb/2016:15:21:33-0500,mk
17/Feb/2016:16:21:33-0500,mk
하지만 제가 정말 원하는 것은 이를 수정하여 동일한 파일에 저장하는 것입니다. 어떻게 해야 하나요?
답변1
GNU Sed를 사용하는 경우 다음을 실행하세요.
sed -i '/map/s/\(.*\)].*\/\(.*$\)/\1,\2/' example.csv
경고하다:이렇게 하면 파일 내용을 덮어쓰게 됩니다. 정규식이 올바른지 확실하지 않은 경우 먼저 복사본을 만드세요.정확히당신은 무엇을 원합니까?
만약 너라면아니요GNU Sed가 있거나 모든 POSIX 시스템에서 실행할 수 있는 보다 이식성 있는 솔루션을 원합니다.사용ex
:
파일을 편집하지 않고 시험 실행하려면:
printf '%s\n' 'g/map/s/\].*\/\([^/]*\)$/,\1/' %p | ex example.csv
결과가 만족스러우면 변경 사항을 저장하세요.
printf '%s\n' 'g/map/s/\].*\/\([^/]*\)$/,\1/' x | ex example.csv