
次のように、ファイル名とMD5の合計を一覧表示するMD5ファイルがあります。
MD5 (file14n0001.xml.gz) = 04eb2524d271077ec8f1a0021779b171
MD5 (file14n0002.xml.gz) = 07e2b29645e9211cce9daf1ae27e7b99
MD5 (file14n0003.xml.gz) = c31cca187a32743441868822b02d83aa
たとえば、ファイル名とMD5の合計を解析するだけです。希望の出力は次のとおりです。
file14n0001.xml.gz 04eb2524d271077ec8f1a0021779b171
file14n0002.xml.gz 07e2b29645e9211cce9daf1ae27e7b99
file14n0003.xml.gz c31cca187a32743441868822b02d83aa
私のtr(sedで強化された)式は次のとおりです。
tr -d 'MD5() ' | sed 's/=/ /g'
ただし、式のtr部分も行の5をすべて削除するため、出力は次のようになります。
file14n0001.xml.gz 04eb224d271077ec8f1a0021779b171
file14n0002.xml.gz 07e2b2964e9211cce9daf1ae27e7b99
file14n0003.xml.gz c31cca187a32743441868822b02d83aa
どのように進めるべきかアドバイスをお願いします。
答え1
注文する:
sed -r 's/MD5 .(.*). = (.*)/\1 \2/' filename
出力:
file14n0001.xml.gz 04eb2524d271077ec8f1a0021779b171
file14n0002.xml.gz 07e2b29645e9211cce9daf1ae27e7b99
file14n0003.xml.gz c31cca187a32743441868822b02d83aa
答え2
未使用tr
、使用のみ可能ですsed
。
sed -r -e 's/^MD5 [(](.+)[)] = ([0-9a-f]+)$/\1 \2/g'
答え3
小さなファイルの場合は、純粋なbashソリューションを選択できます。
while IFS='() ' read -r _ file_name _ sum;
do
printf '%s %s\n' "$file_name" "$sum";
done < file
file14n0001.xml.gz 04eb2524d271077ec8f1a0021779b171
file14n0002.xml.gz 07e2b29645e9211cce9daf1ae27e7b99
file14n0003.xml.gz c31cca187a32743441868822b02d83aa
答え4
列数が固定されていて有用であるawk
とsed
仮定します。
awk '{print $2,$4}' file.txt | sed 's@[()]@@g'
foo@bar(~) $ awk '{print $2,$4}' file.txt | sed 's@[()]@@g'
file14n0001.xml.gz 04eb2524d271077ec8f1a0021779b171
file14n0002.xml.gz 07e2b29645e9211cce9daf1ae27e7b99
file14n0003.xml.gz c31cca187a32743441868822b02d83aa
ソートの概要:目的の列を取得し、シンボルをawk
削除します。()