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'