숫자가 포함된 모든 텍스트를 바꾸고 해당 숫자를 제거하는 유용한 명령이 있습니까?
전임자:
myimages-202x250.jpg
width="202" heignt="250"
다음으로 교체
myimages.jpg
width="217" height="317"
sed를 사용해 보았지만 작동하지 않습니다
sed -i 's/*-*x*.jpg/.jpg/g' myfile.sql
답변1
@Costas가 지적했듯이 globbing 모드를 사용하고 sed
BRE를 사용하고 있습니다.일반적인 표현( sed
의 옵션이 사용된 경우 -r
ERE ).
명령은 다음과 같아야 합니다.
sed -i -r 's/-[0-9]+x[0-9]+\.jpg/.jpg/g' myfile.sql
설명하다:
[0-9]
"모든 숫자"(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)를 의미합니다.+
"하나 이상의 이전 원자"를 의미합니다( ERE에서만 특별한 의미를 가지므로-r
스위치가 필요함 ).+
따라서 패턴은 -[0-9]+x[0-9]+\.jpg
다음을 의미합니다. "리터럴, -
하나 이상의 숫자, 리터럴 x
, 하나 이상의 숫자, 리터럴 .
(RE에서는 백슬래시가 특수 문자이므로 중요함 .
), 그 뒤에 텍스트 jpg
.
편집하다:
명확하게 설명하면 다음과 같이 원하는 작업이 수행됩니다.
sed -i -r -e 's/-[0-9]+x[0-9]+\.jpg/.jpg/g' -e 's/width="[0-9]+" *height="[0-9]+"/width="217" height="317"/' myfile.sql
추가된 패턴은 width="[0-9]+" *height="[0-9]+"
위와 동일한 원리를 기반으로 하며 하드코딩된 문자열로 대체됩니다 width="217" height="317"
.