을 사용하여 수학을 수행하려고 하는데 sed
변수가 계속 문자열로 처리됩니다. 입력은 다음과 같습니다.
$ echo 12 | sed 's/[0-9]*/&+3/'
$ 12+3
나는 15를 출력으로 원한다. 프로그램을 Python 데몬으로 실행 stdout
하고 파일 리디렉션, 해당 파일 열기, 작업 수행, 결과 추출 등과 같은 단락 교체를 피하고 싶기 때문에 한 기사에서 작업을 수행하고 수학적 결과를 바꾸면 됩니다. . 나에게 sed
가장 좋은 방법은 모든 것을 한 줄로 수행하는 것입니다.
나는 다양한 방법으로 입력과 출력을 캐스팅하려고 시도했습니다.
$ echo 12 | sed 's/[0-9]*/int(&+3)/'
$ echo 12 | sed 's/[0-9]*/\int(&+3)/'
$ echo 12 | sed 's/[0-9]*/\int(&+3)/'
그러나 결과는 항상 두 번째 필드를 인쇄합니다.
답변1
정말로 sed를 사용하고 싶다면 다음을 수행하십시오:
s/[0-9]/<&/g
s/0//g; s/1/|/g; s/2/||/g; s/3/|||/g; s/4/||||/g; s/5/|||||/g; s/6/||||||/g
s/7/|||||||/g; s/8/||||||||/g; s/9/|||||||||/g
: tens
s/|</<||||||||||/g
t tens
s/<//g
s/+//g
: minus
s/|-|/-/g
t minus
s/-$//
: back
s/||||||||||/</g
s/<\([0-9]*\)$/<0\1/
s/|||||||||/9/; s/||||||||/8/; s/|||||||/7/; s/||||||/6/; s/|||||/5/; s/||||/4/
s/|||/3/; s/||/2/; s/|/1/
s/</|/g
t back
입력하다:
1+2
100+250
100-250
산출:
3
350
-150
당신이 그것을 받아들이기로 선택했다면 당신의 임무는 곱셈을 구현하는 것입니다.
답변2
sed
여기서는 최선의 선택이 아니며 산술 자체를 수행하지 않습니다(참조숫자를 늘리다그런데 어떻게 그럴 수 있겠습니까). 당신은 이것을 할 수 있습니다 awk
:
$ echo 12 | awk '{print $0+3}'
15
사용하기 가장 좋은 코드는 입력의 정확한 형식과 원하는/필요한 작업(숫자가 아니거나 여러 숫자가 포함된 경우 등)에 따라 다릅니다.
이 작업을 수행하려면 다음 명령을 사용할 수도 있습니다 bash
.
$ echo $(( $(echo 12) + 3 ))
또는 expr
비슷한 방식으로 사용됩니다.
답변3
나는 @Richter의 도전에 응하려고 노력했습니다. 이것이 제가 귀하의 코드 일부를 사용하여 수행한 작업입니다.
sed 's/[0-9]/<&/g
s/0//g; s/1/|/g; s/2/||/g; s/3/|||/g; s/4/||||/g; s/5/|||||/g; s/6/||||||/g
s/7/|||||||/g; s/8/||||||||/g; s/9/|||||||||/g
: tens
s/|</<||||||||||/g
t tens
s/<//g
s/.*\*$/0/
s/^\*.*/0/
s/*|/*/
: mult
s/\(|*\)\*|/\1<\1*/
t mult
s/*//g
s/<//g
: back
s/||||||||||/</g
s/<\([0-9]*\)$/<0\1/
s/|||||||||/9/; s/||||||||/8/; s/|||||||/7/; s/||||||/6/; s/|||||/5/; s/||||/4/
s/|||/3/; s/||/2/; s/|/1/
s/</|/g
t back'
입력하다:
04*3
4*3
40*3
42*32
150*20
1*3
3*1
0*3
3*0
출력: 모두 올바른 결과
답변4
계산기에 문자열을 입력하면 됩니다.
echo 12 | sed 's/[0-9]*/&+3/' | bc