다음과 같은 파일이 있습니다.
one line
echo number_format($row1[$z+1],2,",",".");
echo "<b><font color=red>".number_format($mount_01,2,",",".")."</font></b>";
echo "<b><font color=red>".number_format($mount_02,2,",",".")."</font></b>";
other line
<td bgcolor="red"><b><font color="white"><?echo number_format($general,2,",",".");?></font></b></td>
another line
<td><font size=4><b><?echo number_format($sum_total,2,",",".");?></font></b></td>
쉼표는 number_format을 포함하는 줄뿐만 아니라 파일의 모든 줄에 존재할 수 있습니다.
다음 정규식을 사용하세요: grep -Eo 'number_format\(\$([a-zA-Z0-9_]|([a-zA-Z0-9_]{1,}|)[a-zA-Z0-9_\\]{1,}\[\$[a-zA-Z0-9](\+[a-zA-Z0-9])*{1,}(\]))*,[0-9],",",".")' file
일치:
number_format($row1[$z+1],2,",",".")
number_format($mount_01,3,",",".")
number_format($mount_02,2,",",".")
number_format($general,3,",",".")
number_format($sum_total,4,",",".")
첫 번째 쉼표 뒤의 첫 번째 숫자를 4로 변경하고 싶습니다.
one line
echo number_format($row1[$z+1],4,",",".");
echo "<b><font color=red>".number_format($mount_01,4,",",".")."</font></b>";
echo "<b><font color=red>".number_format($mount_02,4,",",".")."</font></b>";
other line
<td bgcolor="red"><b><font color="white"><?echo number_format($general,4,",",".");?></font></b></td>
another line
<td><font size=4><b><?echo number_format($sum_total,4,",",".");?></font></b></td>
제가 지금까지 상담한 내용은우편 엽서
나는 이것을 할 수 있다
grep -Eo 'number_format\(\$([a-zA-Z0-9_]|([a-zA-Z0-9_]{1,}|)[a-zA-Z0-9_\\]{1,}\[\$[a-zA-Z0-9](\+[a-zA-Z0-9])*{1,}(\]))*,[0-9],",",".")' file |sed -E '1,$ s/^("[^"]*"|[^",]*)(, *)[0-9]*,/\1\24,/'
그것은 나에게 다음과 같은 결과를 제공합니다.
number_format($row1[$z+1],4,",",".")
number_format($mount_01,4,",",".")
number_format($mount_02,4,",",".")
number_format($general,4,",",".")
number_format($sum_total,4,",",".")
하지만 내가 원하는 방식으로 파일을 교체하지 않습니다. 나는 이것이 sed에서 정규식 그룹을 캡처하는 것과 관련이 있다는 것을 알고 있습니다.
지금까지 수행한 작업에 대한 추가 정보를 추가하기 위해 이 게시물을 편집하면 예상 결과는 다음과 같습니다.
one line
echo number_format($row1[$z+1],4,",",".");
echo "<b><font color=red>".number_format($mount_01,4,",",".")."</font></b>";
echo "<b><font color=red>".number_format($mount_02,4,",",".")."</font></b>";
other line
<td bgcolor="red"><b><font color="white"><?echo number_format($general,4,",",".");?></font></b></td>
another line
<td><font size=4><b><?echo number_format($sum_total,4,",",".");?></font></b></td>
Romeo Ninov가 제안한 솔루션을 사용하면 이 결과를 얻을 수 있지만 화면에서만 작동하고 변경 사항이 저장되지 않습니다. 그렇기 때문에 sed를 사용하고 싶고, 디렉토리의 모든 파일을 변경하려는 경우에는 더욱 그렇습니다.
함수 번호 형식이 포함된 표현식을 세 개의 정규식으로 분할했습니다.
number_format\(\$([a-zA-Z0-9_]{1,}(\[\$[a-zA-Z0-9_]{1,}\+[a-zA-Z0-9]{1,}(\]))*,))
[0-9], 무엇을 바꾸고 싶은가요?
(\,\"\,\"\,\"\.\"\))
이 코드를 사용해 보면 다음과 같습니다.
sed -E 's/(number_format\(\$([a-zA-Z0-9_]{1,}(\[\$[a-zA-Z0-9_]{1,}\+[a-zA-Z0-9]{1,}(\]))*,))/\14/' file
그것은 나에게 다음을 제공합니다:
one line
echo number_format($row1[$z+1],42,",",".");
echo "<b><font color=red>".number_format($mount_01,42,",",".")."</font></b>";
echo "<b><font color=red>".number_format($mount_02,42,",",".")."</font></b>";
other line
<td bgcolor="red"><b><font color="white"><?echo number_format($general,42,",",".");?></font></b></td>
another line
<td><font size=4><b><?echo number_format($sum_total,42,",",".");?></font></b></td>
마지막 정규식을 사용하면
sed -E 's/(\,\"\,\"\,\"\.\"\))/4\1/' file
나에게주세요
one line
echo number_format($row1[$z+1],24,",",".");
echo "<b><font color=red>".number_format($mount_01,24,",",".")."</font></b>";
echo "<b><font color=red>".number_format($mount_02,24,",",".")."</font></b>";
other line
<td bgcolor="red"><b><font color="white"><?echo number_format($general,24,",",".");?></font></b></td>
another line
<td><font size=4><b><?echo number_format($sum_total,24,",",".");?></font></b></td>
하지만 첫 번째 것을 las regex와 결합하면 작동하지 않고 변경 사항 없이 원본 파일을 반환합니다.
sed -E 's/(number_format\(\$([a-zA-Z0-9_]{1,}(\[\$[a-zA-Z0-9_]{1,}\+[a-zA-Z0-9]{1,}(\]))*,))(\,\"\,\"\,\"\.\"\))/\14\2/' file
one line
echo number_format($row1[$z+1],2,",",".");
echo "<b><font color=red>".number_format($mount_01,2,",",".")."</font></b>";
echo "<b><font color=red>".number_format($mount_02,2,",",".")."</font></b>";
other line
<td bgcolor="red"><b><font color="white"><?echo number_format($general,2,",",".");?></font></b></td>
another line
<td><font size=4><b><?echo number_format($sum_total,2,",",".");?></font></b></td>
그렇다면 어떻게 작동하게 만들까요?
답변1
awk
비슷한 것을 사용해 볼 수 있습니다 .숫자 형식두 번째 필드를 변경합니다(쉼표를 구분 기호로 사용).
awk -F\, 'BEGIN {OFS=","} /number_format/ { $2=4} {print $0}' input_file >output_file