이런 파일이 있어요
샘플 1.txt
ABCDE10998909
10898990XYZ
1898772222YGH
8980000000000sihgj
산출:
ABCD
파일 첫 번째 줄의 처음 4자를 가져와서 변수에 넣어야 합니다.
답변1
사용 head
및 cut
:
$ variable=$( head -n 1 sample1.txt | cut -c 1-4 )
$ printf 'variable is %s\n' "$variable"
variable is ABCD
를 사용하여 첫 번째 줄을 추출한 head
다음 를 사용하여 처음 4자를 자릅니다 cut
. 일부 구현에서는 cut
처음 4개를 반환할 수 있습니다.바이트처음 4개 대신수치(예: GNU cut
). 이는 데이터가 멀티바이트 문자를 사용하는 경우에 영향을 미칩니다.
사용 sed
:
$ variable=$( sed 's/^\(....\).*/\1/;q' sample1.txt )
$ printf 'variable is %s\n' "$variable"
variable is ABCD
sed
첫 번째 줄의 처음 4개 문자를 사용 하고 바꾼 다음 sed
수정된 줄을 출력한 후 종료됩니다.
첫 번째 줄에 4자 미만이 포함된 경우 두 변형 모두 4자 미만을 생성합니다.
귀하의 질문에 태그가 지정되었습니다.역사 유닉스. 이전 쉘에서는 보다 현대적이고 합리적인 쉘을 사용하는 대신 sh
백틱( )을 사용하여 명령을 대체해야 할 수도 있습니다 .`...`
$(...)
답변2
내가 가정하고 있는 과거 UNIX 또는 최신 쉘이 지원되지 않는다고 가정하면 bash
POSIX 호환 방식으로 이 작업을 수행할 수 있습니다.
if IFS= read -r line 2> /dev/null < file; then
result="${line%"${line#????}"}"
printf '%s\n' "$result"
else
printf >&2 '%s\n' 'Unable to read file contents or no newline found in the file'
fi
답변3
GNU grep
(또는 호환 가능) 솔루션:
variable=$(grep -o -m1 '^....' file.txt)
어디
-o
출력만 일치함-m1
한 게임 후 중지^
줄의 시작....
임의의 문자, 4번
노트:
-o
첫 번째 줄의 처음 4개 문자 중 최소 4개를 보고하는 비표준 GNU 확장입니다(현재 일부 다른 구현에서 지원됨).- 즉, 첫 번째 줄에 4개의 문자가 있고 다섯 번째 줄인 경우 해당 줄의 처음 4개의 문자가 보고됩니다.
답변4
이제 언급되었으므로 첫 번째 줄의 처음 4자를 변수에 저장해야 합니다.
command
variable=`awk 'NR==1{print substr($0,1,4)}' filename`
산출
variable=`awk 'NR==1{print substr($0,1,4)}' filename`
echo $variable
ABCD