sedを使用してパターンをハッシュ値に置き換える

sedを使用してパターンをハッシュ値に置き換える

ファイルを検索し、特定のパターンを対応するハッシュ(SHA1)値に置き換えたいと思います。

たとえば、 file.txt次の内容があります。

one S56G one two three
four five V67X six

[A-Z][0-9]\{2\}[A-Z]パターンを一致するSHA1値に置き換えたいです。上記の例では、一致はとS56GですV67X

を使用してsed次のことを試しました。

sed "s/[A-Z][0-9]\{2\}[A-Z]/$(echo \& | sha1sum)/g"

結果は常にハッシュ値なので成功しません'&'

geまた、次のコマンドタグを試してみました。

sed 's/[A-Z][0-9]\{2\}[A-Z]/echo & | sha1sum/ge'

エラーが発生します。

sh: 1: one: not found
sha1sum: one: No such file or directory
sha1sum: two: No such file or directory
sha1sum: three: No such file or directory

ベストアンサー1

$(…)あなたの試みでコマンドの置き換え()を実行してください。今後 sed実行中で、文字列がパラメータとして渡されます。

コードの実行をサポートするスクリプト言語を置き換えるには、正規表現を使用してください。

perl -MDigest::SHA=sha1_hex -pe 's/[A-Z][0-9]{2}[A-Z]/sha1_hex$&/ge' inputfile

php -R 'echo preg_replace("/[A-Z][0-9]{2}[A-Z]/e","sha1(\$0)",$argn),"\n";' inputfile

ruby -rdigest/sha1 -pe '$_.gsub!(/[A-Z][0-9]{2}[A-Z]/){Digest::SHA1.hexdigest$&}' inputfile

python -c 'import sys,fileinput,re,hashlib;[sys.stdout.write(re.sub("[A-Z][0-9]{2}[A-Z]",lambda s:hashlib.sha1(s.group(0)).hexdigest(),l))for l in fileinput.input()]' inputfile

おすすめ記事