2015-01-05 1 views
-2

나는 +와 - 숫자의 전체 문자열에서 plusses atm에 의해 구분하는 방법을 찾고 있어요. Number1 - Number2 + Number3 - Number4 등이 필요합니다. 명령 줄 명령이어야합니다 (의미가 o_0가되기를 바랍니다). 그리고 나는 그 안에 거대한 합을 파이프 할 수 있어야합니다. 따라서 sed 명령이 가장 좋습니다. 고맙습니다! 여기까지로+와 -의 합계를

내 명령 행 :

cat oneven.txt | sed 's/\(\w\)/4\/\1/g' | bc -l | sed 's/^\(.*\)$/\1 +/g' |sed 's/\(\w.*\w\)+\(\w.*\w\)/\1-\2/g'| tr "\n" " " | cut -c -11998 

Oneven ==> 불균일 (가 (당신이) 고르지 그것을 짐작하는 1000까지 모든 숫자를 포함

시도 :. sed를 명령하는 A 최소로 사이에 +를 한 쌍의 숫자를 수행하지 않고 변경됩니다 어떤 결과를 더 감점 (교류 전) 예를 추가하지 않았다 :..

4.00000000000000000000 + 1.333333333333333333 33 + + 0.80000000000000000000 0.57142857142857142857 0.44444444444444444444 + + + 0.28571428571428571428 0.09523809523809523809 0.05714285714285714285 + + + 0.04081632653061224489 0.03174603174603174603 0.16666666666666666666 + + + 0.05555555555555555555 0.03333333333333333333 0.02380952380952380952 + + + 0.01851851851851851851 0.11764705882352941176 0.03921568627450980392 + + + 0.02352941176470588235 0.01680672268907563025 0.01307189542483660130 + + + 0.09090909090909090909 0.03030303030303030303 0.01818181818181818181 + + + 0.01298701298701298701 0.01010101010101010101 0.07407407407407407407 + + + 0.02469135802469135802 0.01481481481481481481 0.01058201058201058201 + + + 0.00823045267489711934 0.06250000000000000000 0.02083333333333333333 + + + 0.01250000000000000000 [...]

숫자 1 - 숫자 2 + 숫자 3 - 숫자 4 등이 필요합니다. 커맨드 라인 커맨드 (o_0의 의미가되기를 바란다)이어야하고, 커다란 합계를 파이프에 넣을 수 있어야합니다.

+1

지금까지 시도한 것을 보여줄 필요가 있습니다. – KevinDTimm

+1

걸린 곳의 코드를 포함 시키면 도움이 될 수 있습니다. – SQLMason

+0

체크 아웃 : [N 번째 발생마다 교체] (http://backreference.org/2012/08/22/replace-every-nth-occurrence). 이제 귀하의 경우에 적용하는 방법을 알아보십시오. : P –

답변

1

입력 내용이 한 줄이면 입력란에 tr 명령이 필요하지 않습니다. 그렇지 않다면, 은 sed 앞에 와야하며, sed은 각 행을 개별적으로 처리하므로 숫자 쌍이 다른 행에 있으면 솔루션이 작동하지 않습니다.

해결 방법 자체에 대해 숫자 쌍을 더하기 위해 생각하는 것이 좋지만이를 위해 충분한 정규 표현식을 지정하지 않아 작동하지 않습니다.

sed -e 's/\([^-+]\+\)+\([^-+]\+\)/\1-\2/g' 

이 말한다 : 다른 같은 문자열 다음에 +

  • 다음도 +-
  • 않은 문자의

    • 비 빈 문자열 다음은 내 꺼야.

    실제로 의미하기 때문에 귀하의 정규식 (\(\w.*\w\)+\(\w.*\w\)가) 잘못 :

    • 단어 문자
    • 0 개 이상의 구속 문자
    • 또 다른 단어 문자
    • +
    • 단어를 문자
    • 0 개 이상의 unc onstrained 문자
    • 또 다른 단어 문자

    왜 잘못인가? 플러스는 실제로 단어 문자로 둘러싸인 것이 아니라 공백으로 둘러싸여 있기 때문입니다. 그래서 이것은 실제로 라인의 어떤 것과도 일치하지 않습니다.

    공백을 고려하더라도 일부는 단어 문자가 아닌 소수점으로 시작하므로 실제 숫자와 일치하지 않습니다.

    고칠 경우에도 .*은 더하기 기호와 일치하므로 욕심이 많으면 마지막 플러스 기호 만 바뀔 수 있습니다.