파일 첫 번째 줄의 처음 4자를 가져와서 변수에 넣어야 합니다.

파일 첫 번째 줄의 처음 4자를 가져와서 변수에 넣어야 합니다.

이런 파일이 있어요

샘플 1.txt

ABCDE10998909
10898990XYZ
1898772222YGH
8980000000000sihgj

산출:

ABCD

파일 첫 번째 줄의 처음 4자를 가져와서 변수에 넣어야 합니다.

답변1

사용 headcut:

$ 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 또는 최신 쉘이 지원되지 않는다고 가정하면 bashPOSIX 호환 방식으로 이 작업을 수행할 수 있습니다.

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

관련 정보