Bash를 사용하여 텍스트 파일에 데이터를 열고 쓰시겠습니까?
리눅스에서 셸 스크립팅을 통해 텍스트 파일에 데이터를 자동으로 쓸 수 있는 방법은 무엇입니까?
저는 그 파일을 열 수 있었습니다.하지만, 나는 그것에 데이터를 쓰는 방법을 모릅니다.
간단한 대답은 다음과 같습니다.
echo "some data for the file" >> fileName
그러나 EOF(End of Line Characters)는 이상적인 방식으로 처리하지 않습니다.따라서 두 개 이상의 행을 추가할 경우에는printf
:
printf "some data for the file\nAnd a new line" >> fileName
그>>
그리고.>
연산자는 명령 출력을 리디렉션하는 데 매우 유용하며 다른 여러 bash 명령과 함께 작동합니다.
#!/bin/sh
FILE="/path/to/file"
/bin/cat <<EOM >$FILE
text1
text2 # This comment will be inside of the file.
The keyword EOM can be any text, but it must start the line and be alone.
EOM # This will be also inside of the file, see the space in front of EOM.
EOM # No comments and spaces around here, or it will not work.
text4
EOM
명령 출력을 다음 파일로 리디렉션할 수 있습니다.
$ cat file > copy_file
또는 추가합니다.
$ cat file >> copy_file
직접 작성하려면 다음 명령을 사용합니다.echo 'text'
$ echo 'Hello World' > file
#!/bin/bash
cat > FILE.txt <<EOF
info code info
info code info
info code info
EOF
저는 이것이 빌어먹을 오래된 질문이라는 것을 알지만, OP가 스크립팅에 관한 것이고, 구글이 저를 여기로 데려왔다는 사실 때문에, 읽고 쓰기 위한 파일 설명자를 여는 것도 또한 언급되어야 합니다.
#!/bin/bash
# Open file descriptor (fd) 3 for read/write on a text file.
exec 3<> poem.txt
# Let's print some text to fd 3
echo "Roses are red" >&3
echo "Violets are blue" >&3
echo "Poems are cute" >&3
echo "And so are you" >&3
# Close fd 3
exec 3>&-
그리고나서cat
단말기에 있는 파일
$ cat poem.txt
Roses are red
Violets are blue
Poems are cute
And so are you
이 예는 파일 시를 발생시킵니다.txt 파일 설명자 3에서 읽고 쓰기 위해 열려 있어야 합니다.또한 *nix 상자는 더 많은 fd를 알고 있으며 stdin, stdout 및 stderr(fd 0,1,2)만 알고 있음을 보여줍니다.그것은 사실 많은 것을 가지고 있습니다.일반적으로 커널이 할당할 수 있는 최대 파일 설명자 수는 다음에서 찾을 수 있습니다./proc/sys/file-max
또는/proc/sys/fs/file-max
그러나 9 이상의 fd를 사용하는 것은 셸에서 내부적으로 사용하는 fd와 충돌할 수 있기 때문에 위험합니다.그러니 신경 쓰지 말고 fd의 0-9만 사용하세요.bash 스크립트에 9개의 파일 설명자가 더 필요하다면 어쨌든 다른 언어를 사용해야 합니다 :)
어쨌든, fd's는 많은 흥미로운 방법으로 사용될 수 있습니다.
저는 이 대답이 좋습니다.
cat > FILE.txt <<EOF
info code info
...
EOF
하지만 제안할 것입니다.cat >> FILE.txt << EOF
이미 존재하는 것을 삭제하지 않고 파일 끝에 무언가를 추가하려면
다음과 같이:
cat >> FILE.txt <<EOF
info code info
...
EOF
@lycono의 요청에 따라 내 의견을 답변으로 이동
루트 권한으로 이 작업을 수행해야 하는 경우 다음과 같이 수행합니다.
sudo sh -c 'echo "some data for the file" >> fileName'
문서를 사용할 수 없는 환경의 경우(Makefile
,Dockerfile
등) 자주 사용할 수 있습니다.printf
합리적이고 읽기 쉽고 효율적인 솔루션을 위해.
printf '%s\n' '#!/bin/sh' '# Second line' \
'# Third line' \
'# Conveniently mix single and double quotes, too' \
"# Generated $(date)" \
'# ^ the date command executes when the file is generated' \
'for file in *; do' \
' echo "Found $file"' \
'done' >outputfile
저는 완벽하게 훌륭한 답이 몇 개 있다고 생각했지만, 모든 가능성에 대한 간결한 요약은 없었습니다. 따라서:
여기서 대부분의 답변 뒤에 있는 핵심 주체는 리디렉션입니다.다음 두 가지는 파일에 쓰기 위한 중요한 리디렉션 연산자입니다.
출력 리디렉션:
echo 'text to completely overwrite contents of myfile' > myfile
리디렉션 출력 추가
echo 'text to add to end of myfile' >> myfile
여기 문서
다과같은고입정된력과 같은 것이 언급되었습니다.echo 'text'
또한 위의 bash 매뉴얼 링크에 자세히 나와 있는 "여기 문서"를 통해 대화형으로 파일에 쓸 수 있습니다.를 들면대답들은들어, 를예그어들.
cat > FILE.txt <<EOF` or `cat >> FILE.txt <<EOF
동일한 리디렉션 연산자를 사용하지만 "여기 문서"를 통해 다른 계층을 추가합니다.에서 "" " " " FILE.txt" "의.cat
쓰기는 대화형 입력에 특정 문자열(이 경우 'EOF')이 지정된 후에만 수행되지만, 다음과 같은 임의의 문자열일 수 있습니다.
cat > FILE.txt <<'StopEverything'` or `cat >> FILE.txt <<'StopEverything'
그렇게 하는 것이 좋을 것입니다.여기서 문서는 다양한 구분 기호와 다른 흥미로운 구문 분석 문자도 찾습니다. 따라서 문서에서 자세한 내용을 확인하십시오.
여기 문자열
리디렉션 및 Here Documents 구문을 모두 이해하는 데 있어 약간 복잡하지만 Here Documents 스타일 구문을 표준 리디렉션 연산자와 결합하여 Here String이 될 수 있습니다.
cat 입력 출력 리디렉션 출력
cat > myfile <<<'text to completely overwrite contents of myfile'
고양이 입력의 리디렉션 출력 추가
cat >> myfile <<<'text to completely overwrite contents of myfile'
이 접근 방식은 효과적이며 최고입니다.
cat > (filename) <<EOF
Text1...
Text2...
EOF
기본적으로 텍스트는 파일 쓰기/추가를 종료할 때까지 키워드 "EOF"를 검색합니다.
변수를 사용하는 경우 다음을 사용할 수 있습니다.
first_var="Hello"
second_var="How are you"
만약 당신이 두 문자열을 동시에 파일에 쓰고 싶다면, 아래를 사용하세요.
echo "${first_var} - ${second_var}" > ./file_name.txt
당신의.file_name.txt
-하세요"입니다
여기 문서와 vi도 사용할 수 있습니다. 아래 스크립트는 3줄과 변수 보간이 있는 FILE.txt를 생성합니다.
VAR=Test
vi FILE.txt <<EOFXX
i
#This is my var in text file
var = $VAR
#Thats end of text file
^[
ZZ
EOFXX
그러면 파일은 아래와 같이 3줄이 될 것입니다."i"는 vi insert 모드를 시작하는 것이고 Esc와 ZZ로 파일을 닫는 것과 유사합니다.
#This is my var in text file
var = Test
#Thats end of text file
언급URL : https://stackoverflow.com/questions/11162406/open-and-write-data-to-text-file-using-bash
'programing' 카테고리의 다른 글
R을 사용하여 압축된 데이터 파일 다운로드, 압축 풀기 및 데이터 가져오기 (0) | 2023.06.05 |
---|---|
괄호 안의 문자열은 왜 그 문자열만으로 튜플을 만들지 않습니까? (0) | 2023.06.05 |
날짜별 그룹화 방법 추가 mariadb (0) | 2023.06.05 |
그리드 레이아웃에서 제스처 감지 실행 (0) | 2023.06.05 |
이클립스 워크스페이스:무엇 때문에 그리고 왜? (0) | 2023.06.05 |