특정 문자열을 문자로 감싸기

특정 문자열을 문자로 감싸기

예를 들어 대용량 파일에는 다음이 포함될 수 있습니다.

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

가장 간단하게는 이것은 /16across 로 변경 [[[/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+대체 합니다 . 주위를 둘러볼 것으로 예상하지 않는 내용(또는 교체하는 경우)에 따라 연산자의 내용을 조정 하고 둘러봐야 할 수도 있습니다. 또는 교체를 원할 경우 또는 또는 또는 또는 내부에 나타나더라도 완전히 제거할 수 있습니다.1616(?<!...)(?!...)!=/16/16shttp://16.1.2.3/1/16blah/16.12e-20/1654321[[[/16]]]

답변4

정확한 일치를 수행하려는 경우 제공된 다른 솔루션 외에도 다음 명령이 도움이 될 수 있습니다.

 sed 's#/16#[[[/16]]]#g' yourfilename

이것설명하다다음과 같이:

  • sed파일이나 파이프와 같은 입력 스트림의 텍스트 수정을 위해 설계된 유틸리티입니다.
  • s명령은 텍스트를 바꾸거나 바꾸는 데 사용됩니다. 검색 패턴과의 충돌을 피하기 위해 명령에서 구분 기호 #로 사용됩니다 .s/
  • /16찾고 있는 특정 문자열을 나타내며 [[[/16]]]이를 대체하려는 문자열입니다.
  • g끝에 있는 플래그는 전역 교체를 나타냅니다.

관련 정보