다음과 같은 문자열이 포함된 .flame/XML 파일에 쓰는 스크립트를 만들었습니다.
scale="n"
어디N자릿수가 가변적인 난수입니다. 내가 하려는 것은 이 문자열을 특정 범위 내의 다른 임의의 숫자로 바꾸는 것입니다. 이미 가지고 있기 때문에 이 숫자를 생성하는 것은 쉽지 않습니다.쉿이를 위해 노력하십시오. 이 문자열은 다음 문자열 중 하나와 유사할 수 있으므로 찾아서 바꾸려고 할 때 문제가 발생합니다.
scale="54.1948", scale="182.55816", or scale="3.59"
나는 사용해 보았습니다.sed이를 위해 가능하다고 생각하지만 아직 올바른 구문을 찾지 못했습니다. 이 문자열의 발생은 파일 간에 일관되지 않습니다.
이상적으로, 내가 찾고 있는 명령은 다음과 같은 문자열을 변환합니다.
scale="54.1948" or scale="3.59"
하나는 다음과 같습니다.
scale"254" or scale="579"
도와주셔서 감사합니다.
답변1
찾고 있는 구문은 입니다 sed -e 's/\(scale=\)"[0-9]\+\(\.[0-9]\+\)\?"/\1"'"$replacement_number"'"/'
. 정규식 세부정보를 검색하세요.
\(scale=\) the literal string scale=, remembered as \1
" opening double quote
[0-9]\+ one or more digits
\(\.[0-9]\+\)\? optionally, a period followed by one or more digits
" closing double quote
답변2
이는 더 간단하고 일반적인 솔루션입니다. 이 솔루션은 확장된 sed 구문( -e
) 및 역참조를 사용하지 않습니다 .
그러면 큰따옴표 사이의 모든 내용이 숫자로 대체됩니다 $n
.
기본 sed
명령은 다음과 같습니다.
s/scale="[^"]*"/scale="$n"/
이 표현식은 [^"]*
큰따옴표가 아닌 문자 0개 이상과 일치합니다. 인용 후 shell
명령은 다음과 같습니다.
sed "s/scale=\"[^\"]*\"/scale=\"$n\"/"
scale
숫자와 소수점만 포함된 값을 변경하려면 다음과 같이 사용할 수 있습니다.
s/scale="[.0-9]*"/scale="'$n"/
입력 확인과 가독성 및 유지 관리성 사이에는 종종 절충안이 있습니다.