sed를 사용하여 파일 대체 수행

sed를 사용하여 파일 대체 수행

sed를 사용하여 대용량 파일의 날짜를 바꾸려고 합니다. 나는 시도했다:

sed -ie 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g' test

그러나 아무 일도 일어나지 않고 내 파일 테스트가 수정되지 않습니다. 내가 여기서 무엇을 놓치고 있는지 아시나요?

매우 감사합니다.

답변1

기본적으로 sed다음을 사용합니다 .기본 정규식. BRE에서는 , {, }, ()일반 문자처럼 동작합니다. 따라서 탈출해야 하며 다음을 수행해야 {합니다 }.

sed -i 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g' test

확장 정규 표현식을 사용하는 경우 이를 이스케이프 처리할 필요가 없습니다.

sed -r -i 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g' test

옵션은 ERE를 -r나타냅니다 sed.

   -r, --regexp-extended

          use extended regular expressions in the script.

또한 -e귀하의 예에서는 사용이 중복됩니다.

답변2

중괄호를 이스케이프 처리해 보세요.

sed -ie 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g' test

답변3

누구나

echo "foo 2014-01-01 bar" | sed -r 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g'

또는

echo "foo 2014-01-01 bar" | sed 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g'

관련 정보