리눅스 배쉬를 사용하세요.
1000
내 파일에 다음 코드가 있고 숫자 값( )을 다른 값으로 변경하고 싶습니다 .
문서:
//...
if (counter==(1000)) {
// ...
나는 다음 명령을 사용해 보았습니다.
sed 's/[0-9][0-9]+/9999/g' file.cpp
그러나 아무것도 변하지 않습니다.
또한 이러한 변화가 영구적이기를 바랍니다. 어떻게 해야 하나요?
답변1
+
당신은 수량자를 사용하고 있습니다확장 정규식구문 설정이지만 sed
기본 정규 표현식이 기본적으로 사용됩니다. 따라서 플래그를 추가하여 ERE를 활성화해야 합니다 -E
.
sed -E 's/[0-9][0-9]+/9999/' file.cpp
또는 해당 BRE 구성을 사용하십시오.
sed 's/[0-9]\{2,\}/9999/' file.cpp
@Stéphane Chazelas가 지적했듯이 휴대성이 더 좋습니다.
수정되니 참고해주세요두 개 이상의 연속 숫자를 포함하는 줄그룹을 다음으로 대체하여 9999
예제와 일치하는 행만 있는지 확인하려면
if (counter==(1000)) {
영향을 받았으므로 적절한 항목을 추가하는 것이 좋습니다.주소 지정자일치 항목을 더욱 구체적으로 만드세요.
sed '/if (counter==([0-9]\{2,\}))/s/[0-9]\{2,\}/9999/' file.cpp
이렇게 하면 일치하는 라인에서만 교체가 수행됩니다.if (counter==(two-or-more-digit-number))
g
입력 예에서는 해당 행에 해당 숫자 그룹이 하나만 있으므로 이 옵션은 불필요한 것 같습니다.
파일을 직접 수정하기 위해 대부분의 sed
구현은 이제 -i
"in-place" 수정 플래그를 이해합니다. 다시 말하지만, @Stéphane Chazelas가 올바르게 지적했듯이, 이것을 다른 플래그와 함께 사용하는 경우 -i
백업 파일을 생성하는 데 사용된 접미사에 대해 예상대로 순서가 올바른지 확인하십시오(GNU에서는 비어 있을 수 있지만 sed
FreeBSD/ MacOS 구현):
sed -i '' -E 's/.../.../'
FreeBSD에서 작동합니다sed
sed -i -E 's/.../.../'
아니면sed -Ei 's/.../.../'
GNU에서 작업할 예정인가요?sed
sed -iE 's/.../.../'
E
백업 접미사로 처리되므로 작동하지 않습니다 .