다음과 같이 파일 이름과 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
제거하십시오.()