"sed" 추가

"sed" 추가

을 사용하여 수학을 수행하려고 하는데 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

관련 정보