총 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
뒤에 오는 것을 의미합니다 .d
t
점은 모든 문자와 일치하므로 다음을 사용하십시오.
~~adt.*~
~~adt
0을 포함하여 임의 개수의 문자 와 일치합니다 ~
.
답변3
다음을 시도해 볼 수 있습니다.
sed 's/~.*~//' file > file_new
출력은 다음과 같습니다:
478|14395189_p0.jpg
479|44836628_p0.jpg
480|Miku_Collab_2_by_Luciaraio.jpg