하나의 명령으로 많은 수의 단어 삭제

하나의 명령으로 많은 수의 단어 삭제

다음과 같은 링크가 많이 있습니다.

https://content.example.net/skin/frontend/2015/default/fonts/test.ttf
https://content.example.net/skin/frontend/2015/default/img/test.svg
https://content.example.net/skin/frontend/2015/default/fonts/test.eot
https://content.example.net/skin/forntend/2015/default/js/test.js

URL에 CSS, jpg, svg, png, ttf 및 기타 텍스트가 포함된 파일에서 링크를 제거하는 방법

이제 다음과 같은 것을 사용하십시오

cat url.txt | sed '/png/d'  | sed '/jpg/d' | sed '/svg/d' | ...etc 

이 작업에는 많은 시간과 노력이 소요됩니다.

이것이 하룻밤 사이에 이루어질 수 있습니까?

답변1

정규식에 "OR" 구문을 사용할 수 있습니다.

sed -E '/png|jpg|svg/d' url.txt

두 패턴 중 하나를 포함하는 모든 줄이 삭제됩니다. 패턴이 파일 확장자인지 확인하고 싶다면, 즉 패턴이 나타나는지 확인해보세요줄 끝에서, 정규식에 앵커를 포함할 수 있습니다.

sed -E '/(png|jpg|svg)$/d' url.txt

cat그런데 파일을 에 넣을 필요는 없습니다 sed. 자체적으로 모든 것을 읽습니다.

답변2

Grep을 사용할 수도 있습니다.

grep -vE '\.(svg|jpg|png)' file

-v일치하지 않는 줄만 인쇄하고 -E확장 정규식을 활성화합니다.

\.(svg|jpg|png)or와 일치하는 정규 표현식입니다 .svg. jpg또는 .png.

이 파일을 수정하고 싶다면,

  • 전역 명령과 함께 Ed를 사용하십시오.

    printf '%s\n' 'g/\.\(svg\|jpg\|png\)/d' w q | ed -s file
    

    g전역 명령이며 d일치하는 줄을 삭제하고 w변경 사항을 저장하고 q종료합니다.

  • Bash와 Vim을 사용하는 GNU/Linux 시스템에서는

    vim -e file<<<'g/\v\.(svg|jpg|png)/d|x'
    

    g다시 전역 명령으로 \v이스케이프 대괄호의 필요성을 비활성화하고 x변경 사항을 저장합니다.

답변3

grep더 알 맞는.

예를 들어 스키마 파일을 생성합니다.

printf '\\.%s$\n' svg jpg png > patterns.txt

다음을 사용하여 줄을 삭제합니다.

grep -vf patterns.txt url.txt

또는 직접적으로:

grep -ve "$(printf '\\.%s$\n' svg jpg png)" url.txt

산출:

https://content.example.net/skin/frontend/2015/default/fonts/test.ttf
https://content.example.net/skin/frontend/2015/default/fonts/test.eot
https://content.example.net/skin/forntend/2015/default/js/test.js

답변4

Raku 사용(옛 Perl 6)

OP의 원본 url.txt파일을 가져와서 로 끝나는 더미 라인을 추가하면 *.txtRaku를 사용한 답변은 다음과 같습니다.

~$ cat url.txt | raku -ne '.say unless .ends-with( "ttf" | "svg" | "eot" | "js" );' 

산출:

https://content.example.net/skin/forntend/2015/default/js/test.txt

위의 코드는 줄의 끝을 보고 싶은 특정 경우에 작동합니다(Raku의 ends-with루틴을 사용합니다). if줄 끝이 있는지 여부를 선택하려면 ; 을 사용하여 unless줄 끝이 있는지 여부를 선택합니다( unless와 동일 if not).

and 라는 파일이 있는 경우 이 ends-with루틴에는 :ignorecase인수도 필요합니다(간단히 다음과 같이 축약됨::ijpgJPG

~$ cat url.txt | raku -ne '.say unless .ends-with( "ttf" | "svg" | "eot" | "js", :ignorecase );'

산출:

https://content.example.net/skin/forntend/2015/default/js/test.txt

HTH.

https://raku.org/

관련 정보