0.2rem
폴더에 or 가 포함된 CSS 파일이 여러 개 있는데 이제 모두 2로 나누어 sum 이 0.5rem 0.6rem
되도록 하고 싶습니다 . 이를 어떻게 사용하거나 달성 할 수 있나요 ?0.1rem
0.25rem, 0.3rem
awk
sed
gawk
나는 성공하지 않고 다음 명령을 시도했습니다.
find . -name "*.css" | xargs gawk -i inplace '{gsub(/([0-9\.]+)rem/, "(\\1 * 0.5)rem"); print $0}'
답변1
확실하진 않지만 sed/gawk
여기에 하나가 있습니다perl
$ echo '0.2rem or 0.5rem 0.6rem' | perl -pe 's/\d+(\.\d+)?(?=rem)/$&*0.5/ge'
0.1rem or 0.25rem 0.3rem
\d+(\.\d+)?
선택적 소수 부분과 숫자 일치(?=rem)
뒤에 숫자가 있는지 확인하세요.rem
$&*0.5
숫자 곱하기0.5
-e
수정자를 사용하면 교체 부분에 문자열 대신 Perl 코드를 사용할 수 있습니다.
파일에 적용됩니다:
find . -name "*.css" -exec perl -i -pe 's/\d+(\.\d+)?(?=rem)/$&*0.5/ge' {} +
또한보십시오:찾기 결과를 반복하는 것이 왜 나쁜 습관입니까?
답변2
find
+GNUawk
해결책:
find . -type f -name "*.css" -exec gawk -i inplace \
'{ for (i=1; i<=NF; i++)
if ($i ~ /^[0-9]+\.[0-9]+rem/) { v=$i/2; sub(/^[0-9]+\.[0-9]+/, "", $i); $i=v $i }
}1' {} \;
답변3
의 경우 정규식이라고 생각 gawk
하시면 되고 실제로는 거기에 일치하는 것이 있습니다 . 그래서:RS
RT
RS
find . -name '*.css' -type f -exec \
gawk -i /usr/share/awk/inplace.awk -v RS='[0-9.]*[0-9]rem' -v ORS= 'RT{$0=$0 RT/2 "rem"};1' {} +
사용하지 마세요-i inplace
현재 작업 디렉터리(as or)에서 확장 기능을 먼저 gawk
로드 하려고 하면 누군가가 해당 디렉터리에 악성 코드를 심었을 수 있습니다. 시스템과 함께 제공되는 확장 프로그램 의 경로 는 다를 수 있습니다. 출력을 참조하세요.inplace
inplace
inplace.awk
inplace
gawk
gawk 'BEGIN{print ENVIRON["AWKPATH"]}'
답변4
gawk -i inplace '
{
for(i = 1; i <= NF; i++) {
if($i ~ /[0-9]+(\.[0-9]+)?rem/)
$i = $i / 2 "rem"
}
print
}' file_*
프로그램 실행 전 3개 파일의 내용
이 tail -n +1 -- file_*
명령은 여러 파일의 내용을 한 번에 표시합니다.
$ tail -n +1 -- file_*
==> file_1 <==
0.2rem lorem ipsum 0.5rem
Lorem 0.2rem ipsum dolor sit amet, 0.5rem consectetur adipiscing elit magna aliqua.
Lorem ipsum 0.8rem dolor sit amet, 6rem consectetur 2rem adipiscing elit magna aliqua.
0.2rem lorem ipsum 0.5rem
==> file_2 <==
0.2rem lorem ipsum 0.5rem
Lorem 0.2rem ipsum dolor sit amet, 0.5rem consectetur adipiscing elit magna aliqua.
0.2rem lorem ipsum 0.5rem
Lorem ipsum 0.8rem dolor sit amet, 6rem consectetur 2rem adipiscing elit magna aliqua.
==> file_3 <==
0.2rem lorem ipsum 0.5rem
Lorem 0.2rem ipsum dolor sit amet, 0.5rem consectetur adipiscing elit magna aliqua.
Lorem ipsum 0.8rem dolor sit amet, 6rem consectetur 2rem adipiscing elit magna aliqua.
프로그램 실행 후 3개 파일의 내용
$ tail -n +1 -- file_*
==> file_1 <==
0.1rem lorem ipsum 0.25rem
Lorem 0.1rem ipsum dolor sit amet, 0.25rem consectetur adipiscing elit magna aliqua.
Lorem ipsum 0.4rem dolor sit amet, 3rem consectetur 1rem adipiscing elit magna aliqua.
0.1rem lorem ipsum 0.25rem
==> file_2 <==
0.1rem lorem ipsum 0.25rem
Lorem 0.1rem ipsum dolor sit amet, 0.25rem consectetur adipiscing elit magna aliqua.
0.1rem lorem ipsum 0.25rem
Lorem ipsum 0.4rem dolor sit amet, 3rem consectetur 1rem adipiscing elit magna aliqua.
==> file_3 <==
0.1rem lorem ipsum 0.25rem
Lorem 0.1rem ipsum dolor sit amet, 0.25rem consectetur adipiscing elit magna aliqua.
Lorem ipsum 0.4rem dolor sit amet, 3rem consectetur 1rem adipiscing elit magna aliqua.