2017-05-07 1 views
0

나는 텍스트 파일을 가지고 있고 반 단어를 잘라 내지 않고 (최대 단어 길이는 15) 25 문자 (공백 포함) 이후에 텍스트를 자르려고합니다. 그러나 일부 PHP 기반 솔루션을 보았습니다. (bash) 일반 명령을 사용하는 솔루션이 필요합니다.단어를 자르지 않고 텍스트를 자르는 방법은 무엇입니까?

나는 처음 컷을 cut -c -25으로 할 것이라고 추측하고 있지만 단어가 절반으로 나뉘어지는 것을 방지하는 방법을 모릅니다.

-clarification-

입력 :이 문장은 54 개 문자를 포함 공백이 포함되어 있습니다.

**** 배쉬 마법 ***

원하는 출력 1 : 라인 당

This sentence contains 59 # 25 자

characters, spaces (배치 한 줄에 18 문자가 휴식 것 여기에 "포함"# 라인

+3

질문에 해당 입력에 대한 샘플 입력과 원하는 출력을 추가하십시오. – Cyrus

+1

단어 중간에 25자를 입력하면 어떻게됩니까? 줄을 25 자보다 짧게 만드시겠습니까? "cutting"은 "나머지 줄을 지우다"또는 "linebreak를 삽입"을 의미합니까? (Cyrus의 코멘트를 참조하십시오.) –

+1

또한 25 자 이상인 단어는 어떻게되어야합니까? – Siguza

답변

1

한 쉽고 신속 당 25 제한)

included. # 9 자 on은 검사 된 문자의 수와 현재의 문자가 공백인지 여부를 모두 추적하면서 모든 문자를 개별적으로 파싱하는 것입니다.

이 예에서는 3 개의 변수를 사용합니다. $ inputvar, 전체 문자열을 유지해야하며 변경되지 않습니다; $ resultvar, 잘라 내기 섹션을 보유합니다; $ i는 루프 내에서 사용되지만 겹쳐 쓰여집니다.

for ((i=0;i>-1;i++)); do #Start $i at zero, increment every loop, and don't break normally. 
    if [[ $i -le $((25 - 2)) ]]; then #If $i is less than or equal to 25* 
     resultvar="$resultvar""${inputvar:$i:1}" #Add character at position $i to $resultvar 
    else #If $i is greater than 25 
     if [[ ${inputvar:$i:1} == " " || -z ${textvar:$i:1} ]]; then #If character is a space 
      break #Exit loop; we're done here. 
     else #Otherwise 
      resultvar="$resultvar""${inputvar:$i:1}" #Add to $resultvar like before 
     fi 
    fi 
done 

* 길이 검사는 $ ((25 - 2))입니다. 이것은 우리가 $ i = 0로 시작한다는 사실과 프로세스 순서가 공백 문자를 검사하는 방법 때문입니다. 이 두 가지 모두 우리가 의도 한 것보다 긴 문자열을 효과적으로 반환하게하므로 문자열 길이에서 2를 뺀 것이 부정됩니다.

문을 한 줄로 만들 수도 있습니다.

for ((i=0;i>-1;i++)); do if [[ $i -le $((cutlength - 2)) ]]; then resultvar="$resultvar""${textvar:$i:1}"; else if [[ ${textvar:$i:1} == " " || -z ${textvar:$i:1} ]]; then break; else resultvar="$resultvar""${textvar:$i:1}"; fi; fi; done 

멋진 해결책은 아니지만 어떤 방법 으로든 해결해야합니다.

관련 문제