답변:
이것은 또한 일을 할 것입니다 :
echo "$pid"|awk '{print $2}'
awk -F": " '{print $2}'
. 아직도, 내가 좋아하는 솔루션은 아닙니다.
다음이 작동해야합니다.
var="pid: 1234"
var=${var:5}
당신은시겠습니까 bash
쉘 스크립트를 실행?
POSIX 호환도
var=${var#?????}
외부 프로세스를 사용하는 것이 바람직하지만 고정 길이 패턴의 형태로 5를 하드 코딩해야합니다.
${var:5:2}
will at at 1
및 return 12
.
다음을 사용하여 첫 번째 X 문자를 자르는 간결한 방법이 cut(1)
있습니다. 이 예에서는 5 번째 문자로 시작하는 하위 문자열을 잘라서 처음 4자를 제거합니다.
echo "$pid" | cut -c 5-
git log --pretty=oneline | cut -c 42- | head
cut -c ${LEN}-
. 중괄호는 변수와 유효하지 않은 것을 구별하기 위해 문자열을 유효한 변수 문자로 연결하는 데 사용됩니다. 이에 대한 자세한 정보가 필요하면 "bash 변수 문자열 연결"을 찾아서 왜 / 어떻게 작동하는지에 대한 추가 자료를 찾으십시오.
구문을 사용하려면 -r
옵션 ( "스크립트에서 확장 정규식 사용") sed
을 사용하십시오 {n}
.
$ echo 'pid: 1234'| sed -r 's/^.{5}//'
1234
sed -r 's/.{5}$//'
대신 마지막 5자를 제거 할 수 있습니다
-r
( -E
OS X, IIRC에서) 없이 수행 할 수 있습니다 ( OS X에서 작동하는지 모르겠습니다).
-r
/ -E
) OS X에서 작동
기회도있을 cut
것입니다. 그렇다면:
[me@home]$ echo "pid: 1234" | cut -d" " -f2
1234
cut
는 공백 tr -s ' '
을 "짜내는" 방법 을 사용하여 공백을 더 잘 처리 할 수 있다는 점 입니다.
나는 이 질문 에 의해 제공된 순수한 sed에서 답을 찾았습니다 (물론이 질문이 게시 된 후에 게시되었습니다). 이것은 sed에서만 요청한 내용을 정확하게 수행합니다.
result=\`echo "$pid" | sed '/./ { s/pid:\ //g; }'\``
)의 점 sed '/./
은 원하는 항목입니다. 귀하의 질문은 정확히 내가 시도한 것입니다. 제 경우에는 파일의 특정 줄을 일치시키고 주석 처리를 제거하려고했습니다. 제 경우에는 다음과 같습니다.
# Uncomment a line (edit the file in-place):
sed -i '/#\ COMMENTED_LINE_TO_MATCH/ { s/#\ //g; }' /path/to/target/file
-i
후sed
편집 할 수있는 장소에있는 파일 (당신이 전에 파일을 편집에 일치 식을 테스트 할 경우이 스위치를 제거)입니다.
(이 질문에 따라 sed로 완전히 수행하고 싶었 기 때문에이 게시물을 게시했지만 이전 답변 중 어느 것도 그 문제를 해결하지 못했습니다.)
처음부터 n 문자를 제거하는 대신 숫자를 직접 추출 할 수 있습니다. 이렇게 ...
$ echo "pid: 1234" | grep -Po "\d+"
이것은보다 강력한 솔루션 일 수 있으며보다 직관적 인 것 같습니다.
${string:5}
당신은 배쉬 또는 다른 쉘을 지원하는 구문이를 사용하지 않는 한 후 작동하지 않습니다. 어떤 쉘과 버전을 사용하고 있습니까? 당신의 shebang은 어떻게 생겼습니까? 내 생각에 당신이sh
(예dash
:) 또는 가능zsh
합니다.