같은 형식으로 파일 이름이 있습니다 :어떻게 bash에서 파일명을 파싱합니까?
system-source-yyyymmdd.dat
"-"구분 기호로 사용하여 파일 이름의 다른 비트를 구문 분석 할 수 싶습니다.
같은 형식으로 파일 이름이 있습니다 :어떻게 bash에서 파일명을 파싱합니까?
system-source-yyyymmdd.dat
"-"구분 기호로 사용하여 파일 이름의 다른 비트를 구문 분석 할 수 싶습니다.
당신은 3 '필드', 예를 들어 각각의에서 얻을 수있는 cut command을 사용할 수 있습니다 : "-f"
이$ echo "system-source-yyyymmdd.dat" | cut -d'-' -f2
source
"-d"구분 기호를 지정, 당신은
을 필요로하는 필드의 수를 지정합니다cut
명령을 사용하십시오.
echo "system-source-yyyymmdd.dat" | cut -f1 -d'-'
은 첫 번째 비트를 추출합니다.
-f
매개 변수의 값을 변경하여 적절한 부분을 가져옵니다.
여기에 Cut 명령에 대한 안내서가 있습니다.
필요에 따라 awk은 절단보다 유연합니다. 제 티저 :
# echo "system-source-yyyymmdd.dat" \
|awk -F- '{printf "System: %s\nSource: %s\nYear: %s\nMonth: %s\nDay: %s\n",
$1,$2,substr($3,1,4),substr($3,5,2),substr($3,7,2)}'
System: system
Source: source
Year: yyyy
Month: mm
Day: dd
문제 '유연'로 AWK 설명하면 아이폰 향상된 휴대 전화 ;-)
가또 다른 방법은 셀의 내부 분석 도구를 사용하는 호출처럼 확실히인지되는 피 만드는 자식 프로세스의 비용 :
oIFS=$IFS IFS=- file="system-source-yyyymmdd.dat" set $file IFS=$oIFS echo "Source is $2"
내 마음에 (좋은 우아한에만 내장 기능을 사용하여 배열
var='system-source-yyyymmdd.dat'
parts=(${var//-/ })
에 넣어하는 것입니다 :-) 파일 이름이 같은 공간, 또는, 하늘이 금지, 시세, 역 인용 부호로 "이상한"문자가 포함 된 경우이 작동하지 않습니다 16,
그런 다음, 당신은
echo ${parts[0]} ==> system
echo ${parts[1]} ==> source
echo ${parts[2]} ==> yyyymmdd.dat
주의해야 할 점은 ... 배열의 부분을 찾을 수 있습니다. ..
# 프롬프트가 추가 된 이유가 궁금합니다. 일반적으로이 프롬프트는 루트 또는 수퍼 유저를 나타냅니다. 일반적으로, 나는 ** cut ** 명령어를 시험해 보는 것과 같은 것들이 일반 사용자로서 더 잘 될 것이라고 생각한다. 나는 $ 프롬프트를 사용했을 것이다. –
오, 그래 - 좋은 지적이야. 나는 그 당시 루트로 로그인되어 있었고 단순히 그걸로 갔다는 것을 인정해야한다. 나쁜 습관이다. 그런 말로하면 에코와 컷은 가장 해로운 명령 중 두 가지라고 생각합니다. :) 그러나 완성도를 위해 예제를 즉시 업데이트 할 것입니다. 건배. –
출력에 변수를 어떻게 할당 할 수 있습니까? 만약 내가'var = "system-source-yyyymmdd.dat"| cut -d'- '-f2'는 작동하지 않습니다. – EsseTi