파일의 줄을 다시 쓰는 방법은 무엇입니까? [복사]

파일의 줄을 다시 쓰는 방법은 무엇입니까? [복사]

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

관련 정보