eid|location|desg|status
001|india|hr|active
002|delhi|marketing|inactive
003|hyderabad|sales|active
004|Bangalore|admin|inactive
데이터 형식은 위와 같으며 구분 기호는 "|"입니다. 프롬프트는 eid를 요청하고 상태를 활성 또는 비활성으로 표시해야 합니다.
please enter eid: 001
status is : active
답변1
당신은 사용할 수 read
있습니다sed
read -p "enter an eid: "; sed -n "/$REPLY/ s/.*|\(.*\)/status: \1/p" file
노트
/$REPLY/
사용자 입력이 포함된 행 찾기-n
우리가 요청한 줄만 인쇄하십시오.s/old/new
old
사용. . . 교체new
|\(.*\)
|
나중에 참조할 수 있도록 마지막 문자 뒤의 모든 문자를 저장하세요.\1
p
수정된 라인을 인쇄하세요
최신 문서를 쿼리합니다.
#!/bin/bash
for f in *; do
if [[ "$f" -nt "$newest" ]]; then
"$f"="$newest"
fi
done
read -p "enter an eid: "
sed -n "/$REPLY/ s/.*|\(.*\)/status: \1/p" "$newest"
~에 귀속됨@테덴나를 찾으려고이 페이지- 우리는 ls -t | head -n 1
그것이 작동하지 않을 것이라는 것을 알고 있기 때문에
답변2
이것은 다음을 구문 분석합니다 sh
.
printf 'Enter eid: ' >&2
read query
while IFS="|" read eid location desg status; do
if [ "$eid" = "$query" ]; then
printf 'Status is "%s"\n' "$status"
break
fi
done <data.in
이는 데이터 파일의 이름이 이라고 가정합니다 data.in
.