sed를 사용하여 두 문자 사이의 모든 내용을 삭제하는 방법은 무엇입니까?

sed를 사용하여 두 문자 사이의 모든 내용을 삭제하는 방법은 무엇입니까?

총 482줄이 포함된 파일이 있는데삭제~~광고*~~에서. 내용은 다음과 같습니다.

478|~~adt00000aa9~~~~adt0000000b~~14395189_p0.jpg
479|~~adt00000995~~44836628_p0.jpg
480|~~adt00000aae~~Miku_Collab_2_by_Luciaraio.jpg

시도해 보았지만 sed 's/~~adt*~//' file > new_file모든 것이 삭제되지는 않았습니다.

처음과 마지막 두 개의 ~~ 기호 사이에 있는 모든 항목을 어떻게 제거할 수 있나요?

답변1

제거하고 싶고 ~~adt(something)~~다른 줄에 있을 수 있다는 점을 고려하면 ~~(something different)~~(질문에 표시되지 않음):

$ sed 's/~~adt[^~]*~~//g' file.in >file.out

주어진 데이터에 대해 다음이 생성됩니다.

478|14395189_p0.jpg
479|44836628_p0.jpg
480|Miku_Collab_2_by_Luciaraio.jpg

adt마지막 줄을 로 변경하면 xxx이 명령이 생성됩니다.

478|14395189_p0.jpg
479|44836628_p0.jpg
480|~~xxx00000aae~~Miku_Collab_2_by_Luciaraio.jpg

이 패턴은 모든 문자 다음에 가 아닌 문자가 여러 번 나오는 ~~adt[^~]*~~경우와 일치 한 다음 다시 일치합니다. 마지막은 각 줄의 모든 일치 항목이 제거되도록 합니다.~~adt~~~/g

답변2

adt*0을 포함한 임의의 숫자가 a뒤에 오는 것을 의미합니다 .dt

점은 모든 문자와 일치하므로 다음을 사용하십시오.

~~adt.*~

~~adt0을 포함하여 임의 개수의 문자 와 일치합니다 ~.

답변3

다음을 시도해 볼 수 있습니다.

sed 's/~.*~//' file > file_new

출력은 다음과 같습니다:

478|14395189_p0.jpg
479|44836628_p0.jpg
480|Miku_Collab_2_by_Luciaraio.jpg

관련 정보