특수 문자가 포함된 문자열 제거

특수 문자가 포함된 문자열 제거

test다음과 유사한 파일이 있습니다.

hello
my
name
<h6>test morning</h6>
is
bob

나는 다음을 사용할 것이라는 것을 알고 있습니다.

sed -i -- 's/name//g' test

파일에서 삭제하고 싶은데 name어떻게 해야 합니까 <h6>test morning</h6>?

문자열은 파일의 어느 위치에나 있을 수 있으며 파일은 .css또는 파일과 같은 .html것이 될 수 있습니다.

답변1

이 경우에는 어떤 문자라도 사용할 수 있습니다 /. 예를 들어

sed -i 's|<h6>test morning</h6>||g' test

문자열 마하 모드의 경우 첫 번째를 이스케이프해야 합니다.

sed -i '\|<h6>test morning</h6>|s///g' test

패턴이 거의 없다면 /그냥 탈출하는 것이 쉬울 수도 있습니다.

sed -i '/<h6>test morning<\/h6>/s///g' test

답변2

Perl이 구출하러 옵니다!

Perl에서는 패턴 섹션에서 변수를 사용할 수 있으며 다음을 사용할 수 있습니다.참조 요소(또는 이에 상응하는 \Q이스케이프) 특수 문자를 이스케이프 처리합니다.

REPLACE='<h6>test morning</h6>' perl -pe 's/\Q$ENV{REPLACE}//'

답변3

Perl을 사용하면 파일 및 디렉터리 경로에도 동일한 변경 사항을 적용할 수 있습니다... bash 기능으로 변환된 이 코드 조각은 지난 5년 동안 전문 프로젝트와 사이드 프로젝트에서 가장 많이 사용된 코드 조각이었습니다...

        # some initial checks the users should set the vars in their shells !!!
        test -z $dir_to_morph && exit 1 "You must export dir_to_morph=<<the-dir>> - it is empty !!!"
        test -d $dir_to_morph || exit 1 "The dir to morph : \"$dir_to_morph\" is not a dir !!!"
        test -z $to_srch && exit 1 "You must export to_srch=<<str-to-search-for>> - it is empty !!!"
        test -z $to_repl && exit 1 "You must export to_repl=<<str-to-replace-with>> - it is empty !!!"

        echo "INFO dir_to_morph: $dir_to_morph"
        echo "INFO to_srch:\"$to_srch\" " ;
        echo "INFO to_repl:\"$to_repl\" " ;
        sleep 2

        echo "INFO START :: search and replace in non-binary files"
        #search and replace ONLY in the txt files and omit the binary files
        while read -r file ; do (
           #debug echo doing find and replace in $file
           echo "DEBUG working on file: $file"
           echo "DEBUG searching for $to_srch , replacing with :: $to_repl"

           # we do not want to mess with out .git dir
           # or how-to check that a string contains another string
           case "$file" in
              *.git*)
              continue
              ;;
           esac
           perl -pi -e "s#\Q$to_srch\E#$to_repl#g" "$file"
        );
        done < <(find $dir_to_morph -type f -not -exec file {} \; | grep text | cut -d: -f1)

        echo "INFO STOP  :: search and replace in non-binary files"

        #search and repl %var_id% with var_id_val in deploy_tmp_dir
        echo "INFO search and replace in dir and file paths dir_to_morph:$dir_to_morph"

        # rename the dirs according to the pattern
        while read -r dir ; do (
           perl -nle '$o=$_;s#'"\Q$to_srch\E"'#'"$to_repl"'#g;$n=$_;`mkdir -p $n` ;'
        );
        done < <(find $dir_to_morph -type d|grep -v '.git')

        # rename the files according to the pattern
        while read -r file ; do (
           perl -nle '$o=$_;s#'"\Q$to_srch\E"'#'"$to_repl"'#g;$n=$_;rename($o,$n) unless -e $n ;'
        );
        done < <(find $dir_to_morph -type f -not -path "*/node_modules/*" |grep -v '.git'

관련 정보