',' 내가 원하는 형태로 주어진 파일_이름 someletters_12345_moreleters.ext 푸십시오 가변적입니다 5 자리, 동일팔레트에 묶습니다.
So, I have a 파일_이름 요점이지 강조하십시오 x 5 자리의 수를 그 후 다른 한 쪽에 e0100042.log 둘러싸인 밑줄 문자 집합 x 개로 성장했다. I want to 시행하십시오 숫자 5 를 하고 있는 편이다.
저는 아주 관심이 있는 다양한 방법으로 이 작업을 수행할 수 있습니다.
, 상수입니다 경우 다음과 같은 매개 변수 x 개확장 향상합니다 substring 추출:
b=${a:12:5}
여기서 12 오프셋입니다 (부터 시작하는) 와 5 는 길이 있다.
밑줄 경우 주변의 유일한 수준들과 숫자는 입력 및 접미어입니다 스트립 끕니까 접두어입니다 수 있습니다 (각각) 에 2 단계:
tmp=${a#*_} # remove prefix ending in "_"
b=${tmp%_*} # remove suffix starting with "_"
두 솔루션은 제시된 순결케 bash, 매우 빠르게 업그레이드됨 관련된 프로세스 시작 없이 있다.
일반 파일 이름을 사용할 수 있는 솔루션 등, 첫 번째 시퀀스에만 수 있게 되었다.
number=$(echo $filename | egrep -o '[[:digit:]]{5}' | head -n1)
또 다른 솔루션을 푸십시오 정확히요 일부 변수:
number=${filename:offset:length}
이 경우 항상 사용할 수 있습니다. '형식' stuffdigits 파일_이름 있다.
number=$(echo $filename | awk -F _ '{ print $2 }')
또 다른 솔루션을 사용할 것을 제외하고 모두 제거하시겠습니까 자리
number=$(echo $filename | tr -cd '[[:digit:]]')
누군가 하는 경우에 그 사람이 이렇게 bash 보다 강력한 정보를 검색할 수도 있습니다
$ man bash [press return key]
/substring [press return key]
[press "n" key]
[press "n" key]
[press "n" key]
[press "n" key]
결과:.
< pre>; 매개변수입니다 오프셋할 $ {}: 매개변수입니다 오프셋된 길이 $ {} 문자열 했다. 최대 길이 문자를 확장됨 문자 시작하여 매개변수입니다 지정된 오프셋입니다. 만약 문자열의 길이가 빠졌고, 확장되어 매개변수 시작 - ing 에 의해 지정된 문자 오프셋입니다. 길이와 오프셋된 있다. 산술 표현식에서는 (http://otl. 산술 평가 참조). 만약 제로, 값 (value) 로 평가되는 오프셋할 보다 작은 수를 사용됩니다. 오프셋된 표시됨과 및끝 가치가 매개변수입니다. 산술 표현식에서는 시작으로 공백을 구분해야 합니다 - &solarisdvd 이전. 구분할 수 있는 기본 사용 값을 했다. 길이 로 평가되는 경우 보다 작은 수를 제로 및 파라메트가 아닌 인덱스된 또는 연관 없는 @ 이는 오프셋된 표시됨과 어레이로써, the end of the value 대신 문자 수를 매개변수 및 익스팬전자 - 시옹 () 는 둘 사이의 문자이어야 offsets. 만약 파라메트가 @, 그 결과 길이 시작하여 위치 매개변수입니다 끄기도구 - 설정되었습니다. 이름 아래 있는 경우 또는 파라메트가 인덱스된 어레이입니다 의해 @ *, 그 결과 소속 어레이입니다 디스테이징하는 시작으로 $ {매개변수입니다 [오프셋된]}. 부정적인 것은 상대적인 조롱했기 오프셋할 1 보다 최대 색인입니다 지정된 어레이입니다. 서브노드 - 연관 배열 확장이 적용된 문자열이어야 운데 만듭니다. - 벌금 결과를 얻을 수 있습니다. 단, 제외어 오프셋된 분판된 있어야 합니다. 적어도 한 공간에 의해 혼동하지 않도록 하기 위해 &solarisdvd 콜론
FN=someletters_12345_moreleters.ext
[[ ${FN} =~ _([[:digit:]]{5})_ ]] && NUM=${BASH_REMATCH[1]}
참고: 위의 다섯 자리 () 는 고객의 특정 정규식이 및 제한되는지 시나리오를 둘러싸여 있음을 보여준다. 정규식이 변경하십시오 필요한 경우 다른 일치.
다음 요구 사항
>. I have a 파일_이름 x 5 자리 다음 글자 수를 >. 한 후 다른 어느 한 쪽에 e0100042.log 둘러싸인 밑줄 >. 집합 x 개로 성장했다. I want to 시행하십시오 5 자리 번호 및 >. 그거 붙여넣습니다 변수다.
'일부' 그렙 유용할 수 있는 방법을 찾았다.
$ echo "someletters_12345_moreleters.ext" | grep -Eo "[[:digit:]]+"
12345
이상의
$ echo "someletters_12345_moreleters.ext" | grep -Eo "[[:digit:]]{5}"
12345
그리고 '와' po 구문.
$ echo "someletters_12345_moreleters.ext" | grep -Po '(?<=_)\d+'
12345
또는 하려면 맞게 정확히요 5 자:
$ echo "someletters_12345_moreleters.ext" | grep -Po '(?<=_)\d{5}'
12345
마지막으로, 바로 사용해야 할 수 있도록 저장됩니까 변수 var = $ (명령) '' 구문.
<! - 모든 언어: > 랑 sh -; 만약 우리가 이 개념은 집중적으로 of:< br>; (하나 또는 여러) 의 " 매핑되며, 실행하십시오 digits".
우리는 여러 외부 도구로 사용할 수 있는 푸십시오 numbers.< br>; 우리가 할 수 있고, sed 또는 다른 문자는 모두 매우 쉽게 지우기입니다 tr:< br>;
name='someletters_12345_moreleters.ext'
echo $name | sed 's/[^0-9]*//g' # 12345
echo $name | tr -c -d 0-9 # 12345
이름에 숫자, 위의 여러 런입니다 신앙이니라 $ 는 br> fail:<;
= someletters_12345_moreleters_323_end.ext" " 경우, 이름, 후:
echo $name | sed 's/[^0-9]*//g' # 12345323
echo $name | tr -c -d 0-9 # 12345323
우리는 일반 엑스프레시언스 사용해야 하는 (regex). 하나만 선택할 수 있는 첫 번째 실행하십시오 sed (12345 필터링되지 323) 와 펄 (perl):
echo $name | sed 's/[^0-9]*\([0-9]\{1,\}\).*$/\1/'
perl -e 'my $name='$name';my ($num)=$name=~/(\d+)/;print "$num\n";'
하지만 우리는 그렇게 할 수 있는, (1) , 뿐만 아니라 직접 bash*&l sup> < /sup>; .
regex=[^0-9]*([0-9]{1,}).*$; \
[[ $name =~ $regex ]] && echo ${BASH_REMATCH[1]}
이 첫 번째 숫자 실행하십시오 푸십시오 모든 길이 있습니다 다른 모든 둘러싸인 text / 문자.
< sup> < /sup>;;; (1): 외부 도구에서는 호출하십시오 보다 각 파선-짧은 등장한다. Sed 또는 모든 처리를 하는 것은 대용량 파일을 위한 보다 내부에 있다.
S # 39, here& 접두어입니다 접미어입니다 솔루션 (jb) 와 유사한 솔루션을 제공한 대런) 의 첫 번째 블록이어야 숫자와 일치하는 주변 변화에 의존하지 않는다.
str='someletters_12345_morele34ters.ext'
s1="${str#"${str%%[[:digit:]]*}"}" # strip off non-digit prefix from str
s2="${s1%%[^[:digit:]]*}" # strip off non-digit suffix from s1
echo "$s2" # 12345
& # 39, sed 'i love' s 기능마저도 regex 대응하기 위해 그룹:
> var="someletters_12345_moreletters.ext"
> digits=$( echo $var | sed "s/.*_\([0-9]\+\).*/\1/p" -n )
> echo $digits
12345
조금 더 일반화 될 수 있는 옵션이 없는 표시 밑줄 '네 자리 조합으 _' solaris. 시작 전에 모든 비 번호, 예를 들어 분해한 오프하도록 업그레이드됨 확보하십시오 너회의 계열: / [^ 0-9] ([0-9] +) 의 +\ .*/\1/p '.
> man sed | grep s/regexp/replacement -A 2
s/regexp/replacement/
Attempt to match regexp against the pattern space. If successful, replace that portion matched with replacement. The replacement may contain the special character & to
refer to that portion of the pattern space which matched, and the special escapes \1 through \9 to refer to the corresponding matching sub-expressions in the regexp.
이에 대해 확신을 가질 수 없는 경우, 너무 정규 표현식 함께 # 39 더 you& re:
Sed '& # 39 을 만들기 위해' 모든 '\' 이스케이프합니다 발생합니까 정규 표현식 처리 작동합니까.
파일이 주어진 테스트리트스트 redboot*용 " ABCDEFGHIJKLMNOPQRSTUVWXYZ";
cut -b19-20 test.txt > test1.txt # This will extract chars 19 & 20 "ST"
while read -r; do;
> x=$REPLY
> done < test1.txt
echo $x
ST
My answer will 더 많은 수의 제어 그리웠댔지 out of your 구체화하십시오. 다음은 코드 진단트리로 '어떻게' out of your 문자열이어야 12345 추출할 수 있습니다
str="someletters_12345_moreleters.ext"
str=${str#*_}
str=${str%_more*}
echo $str
이렇게 하면 더 효율적으로 사용할 수 있는 자 '또는' abc 등 모든 확인표시를 푸십시오 생각하신거야 ' 같은 특수 문자 '또는' - '. 예를 들면 다음과 같습니다. 이런 경우 문자열은 하려면 모든 것을 '와' 후 'someletters 전에 _moreleters.ext':
str="someletters_123-45-24a&13b-1_moreleters.ext"
내 코드를 통해 정확히 어떤 운영까지도 언급할 수 있습니다. 설명:
'%' 등 주요 다음을 분리하십시오 문자열이어야 일치하는 것으로 보인다. # 39, & # 39 는 가장 중요한 것은, 우리가 여기 _more
이 몇 가지 흥미로운 실험을 교도관님도요 진실이며당신이 찾을 수 있을 것 "이라고 말했다.
자, 여기 순결케 댁이라면 매개변수입니다 대체 비어 있는 구체화하십시오. 으로 정의한 것은 내가 경고 및 섬레터스 모레레터스 문자만. 이 경우, 문숫자 작동하지 않을 수 없다.
filename=someletters_12345_moreletters.ext
substring=${filename//@(+([a-z])_|_+([a-z]).*)}
echo $substring
12345
하지만 이 문제에 대해 좀 많이 늦게 그냥 실행했음 http://support. 다음과 같습니다.
host:/tmp$ asd=someletters_12345_moreleters.ext
host:/tmp$ echo `expr $asd : '.*_\(.*\)_'`
12345
host:/tmp$
나는 그것을 사용할 수 없는 시스템을 %N 임베드된 협력하였습니다 밀리초 해결안에서는 날짜:
set `grep "now at" /proc/timer_list`
nano=$3
fraction=`expr $nano : '.*\(...\)......'`
$debug nano is $nano, fraction is $fraction