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

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

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

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

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

매우 감사합니다.

답변1

기본적으로 sed다음을 사용합니다 .기본 정규 표현식. BRE에서는 , {, }, ()일반 문자처럼 동작합니다. 따라서 {and 를 이스케이프 처리해야 합니다 }.

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

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

   -r, --regexp-extended

          use extended regular expressions in the script.

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

답변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'

관련 정보