sed
대용량 csv 파일에서 특정 값을 검색하고 바꿀 수 있는 명령을 작성하려고 합니다 . 연도 등이 포함된 이 열이 있지만 2005 - 2006
2001 - 2003
csv 파일에 이러한 내용이 포함된 셀이 많이 포함되는 오류도 있습니다 -2001
-2010
-1998
. 내가 하고 싶은 것은 "become" 등과 -
같이 문자열 끝의 문자를 이동하는 것입니다. 패턴은 영향을 받는 모든 셀에서 동일하며 모든 값은 문자 + 4자리 연도로 구성됩니다.-2001
2001-
-
sed -e "^-[0-9][0-9][0-9][0-9]"
저는 정규식을 처음 접했고 현재 몇 가지 튜토리얼을 따르고 있습니다.
답변1
sed -e "s/^-\([0-9][0-9][0-9][0-9]\)/\1-/" file.csv
\(
과 사이의 부분은 \)
교체 섹션에서 인용되어 \1
"검색어와 일치하는 항목"으로 교체할 수 있습니다.
^
csv 파일을 사용하는 경우 열이 실제로 첫 번째 열(행의 시작과 일치)인 경우에만 작동합니다. 열이 다른 곳에 있으면 다음을 사용할 수 있습니다.
sed -e 's/\(,[[:space:]]*\)-\([0-9][0-9][0-9][0-9]\)/\1\2-/' file.csv
대신에. (쉼표(쉼표 뒤에 공백이 올 수 있음)로 시작하는 열을 감지한 다음 교체 시 해당 시작을 다시 사용합니다.)