예를 들어 대용량 파일에는 다음이 포함될 수 있습니다.
This is a /16 text file
다음과 같이 변경하고 싶습니다.
This is a [[[/16]]]] text file
정확한 문자열과 일치시키려는 경우/16
이를 수행할 수 있는 방법이 있습니까?
답변1
다음과 같은 파일에 이 내용이 있다고 가정해 보겠습니다.text.txt
This is a /16 text file
This is another /8 text file
This is a /32 text file
나는 당신에게 도움이 되는 이 명령을 찾았습니다.
sed -i 's/\/\([0-9]\+\)/[[[\/\1]]]/g' text.txt
답변2
가장 간단하게는 이것은 /16
across 로 변경 [[[/16]]]]
되고 file
원본 콘텐츠는 다음과 같이 유지됩니다 file.bak
.
sed -i'.bak' 's!/16![[[&]]]]!g' file
일부 플랫폼에서는 백업을 생성하지 않고 내부 편집을 위해 -i
접미사 없음(여기 '.bak'
) 또는 빈 접미사 포함(예: ) 사용을 지원할 수 있습니다 . 작성할 부분을 ''
완전히 삭제하세요.-i
표준 출력소스 파일을 편집하는 대신.
예를 들어,
echo 'This is a /16 text file' | sed 's!/16![[[&]]]]!g'
This is a [[[/16]]]] text file
귀하의 지시에 따르면 단어 경계를 고려하지 않습니다. 80/160
는 로 대체됩니다 80[[[/16]]]]0
. 또한 코드는 /8
또는 와 같이 유사하지만 다른 인스턴스를 고려하지 않습니다 /32
. 제발질문을 수정하세요그러한 세부 사항을 고려해야 합니까?
답변3
perl -pi -e 's|(?<!\S)/\d+(?!\S)|[[[$&]]]|g' your-file
/
하나 이상의 십진수( ) 뒤에 공백 이 아닌 문자( ) 앞뒤에 없는 하나 이상의 십진수( ) 로 +
구성된 문자열이 포함됩니다 .\d
(?<!...)
(?!...)
\S
[[[...]]]
일련의 십진수 대신 리터럴과 일치하도록 \d+
대체 합니다 . 주위를 둘러볼 것으로 예상하지 않는 내용(또는 교체하는 경우)에 따라 연산자의 내용을 조정 하고 둘러봐야 할 수도 있습니다. 또는 교체를 원할 경우 또는 또는 또는 또는 내부에 나타나더라도 완전히 제거할 수 있습니다.16
16
(?<!...)
(?!...)
!
=
/16
/16
s
http://16.1.2.3/
1/16
blah/16.12e-20
/1654321
[[[/16]]]
답변4
정확한 일치를 수행하려는 경우 제공된 다른 솔루션 외에도 다음 명령이 도움이 될 수 있습니다.
sed 's#/16#[[[/16]]]#g' yourfilename
이것설명하다다음과 같이:
sed
파일이나 파이프와 같은 입력 스트림의 텍스트 수정을 위해 설계된 유틸리티입니다.- 이
s
명령은 텍스트를 바꾸거나 바꾸는 데 사용됩니다. 검색 패턴과의 충돌을 피하기 위해 명령에서 구분 기호#
로 사용됩니다 .s
/
/16
찾고 있는 특정 문자열을 나타내며[[[/16]]]
이를 대체하려는 문자열입니다.g
끝에 있는 플래그는 전역 교체를 나타냅니다.