2009-06-23 2 views

답변

34

, 다음이 당신이

기본적으로
${str:0:${#str} - 20} 

, 문자열 슬라이스를 사용하여 수행 할 수 있습니다 bash는 지난 20 자리없이 당신에게 문자열을 제공 받게됩니다

${[variableName]:[startIndex]:[length]} 

와 문자열의 길이는

${#[variableName]} 

편집이다 :,솔루션은 파일에서 작동이 나오지 사용 : 떠들썩한 파티에서 ${parameter/pattern/string} 구문에서

sed 's/.\{20\}$//' < inputFile 
+4

'$ {str :: - 20}} '이면 충분합니다. –

1

, 패턴이 경로 와일드 카드 스타일의 패턴이 아닌 정규 표현식이다. 와일드 카드 구문에서 점 .은 리터럴 점이며 중괄호는 선택 항목 (예 : 정규 표현식에서 파이프 |)을 일치시키는 데 사용되므로 행에서 단순히 리터럴 문자열 ".20"이 지워집니다.

+0

설명 해 주셔서 감사합니다. 단 하나의 대답 만 허용됩니다. 죄송합니다. – jaimechen

1

기본 작업을 수행하는 데는 여러 가지 방법이 있습니다.

$ str="qa_sharutils-2009-04-22-15-20-39" 

마지막 20자를 제거하려는 경우. 이 하위 문자열 선택은 0을 기준으로합니다.

$ echo ${str::${#str}-20} 
qa_sharutils 

"%"및 "%%"는 문자열의 오른쪽에서 제거합니다. 예를 들어, 기본 이름을 원하면 첫 번째 "-"다음에 나오는 문자를 빼십시오.

$ echo ${str%%-*} 
qa_sharutils 
+2

'echo "$ {str :: - 20}"'충분합니다. –

0

마지막 20 바이트가 항상 날짜 인 경우에만.

$ str="qa_sharutils-2009-04-22-15-20-39" 
$ IFS="-" 
$ set -- $str 
$ echo $1 
qa_sharutils 
$ unset IFS 

첫 번째 대시 및 그 이후가 필요하지 않은 경우.

$ echo ${str%%-*} 
qa_sharutils 
2

사용 AWK :

echo $str | awk '{print substr($0,1,length($0)-20)}' 

또는 문자열을 사용하여 조작 - $ 에코 {문자열 : 위치 : 길이} :

('ABCDEFG'SUBSTR 유사
echo ${str:0:$((${#str}-20))} 
+1

'echo "$ {str :: - 20}"'충분합니다. –

1

, 2-1 , 3) in php :

echo 'abcdefg'|tail -c +2|head -c 3 
관련 문제