私の現在の bash に関する未解決の問題は、[:punct:]
クラス内のすべての文字を置き換える方法です。
[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]
、それぞれ同じ文字がバックスラッシュでエスケープされています。たとえば、私はなりたい^h?e.l*l+o:
です\^h\?e\.l\*l\+o\:
。
ループを使用してマルチライナー方式で実行できます。より簡潔でエレガントな方法でそれを行うことは可能ですか?
ありがとう、ルカ
私の現在の bash に関する未解決の問題は、[:punct:]
クラス内のすべての文字を置き換える方法です。
[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]
、それぞれ同じ文字がバックスラッシュでエスケープされています。たとえば、私はなりたい^h?e.l*l+o:
です\^h\?e\.l\*l\+o\:
。
ループを使用してマルチライナー方式で実行できます。より簡潔でエレガントな方法でそれを行うことは可能ですか?
ありがとう、ルカ
使えますsed
か?
echo '^h?e.l*l+o:' | sed 's/\([[:punct:]]\)/\\\1/g'
がなければsed
、文字をループする以外に何も考えられません:
s='^h?e.l*l+o:'
o=''
for ((i=0; i<${#s}; i++)) ; do
c=${s:i:1}
[[ $c =~ [[:punct:]] ]] && o+=\\
o+=$c
done
echo "$o"
もう 1 つの可能性は、Perl のquotemetaを使用することです。
echo '^h?e.l*l+o:' | perl -lne 'print quotemeta'
-l
改行を処理します。-n
入力を 1 行ずつ処理します。