特殊文字を含む文字列の削除

特殊文字を含む文字列の削除

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'

関連情報