tr 및 sed 표현식 "조정"

tr 및 sed 표현식 "조정"

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

관련 정보