나는 항상 이런 파일에 텍스트를 추가합니다.
echo "text text text ..." >> file
# or
printf "%s\n" "text text text ..." >> file
동일하고, 더 우아하거나, 더 특이한 방법을 달성할 수 있는 더 많은 방법이 있는지 궁금합니다.
답변1
저는 이것이 정말 마음에 듭니다. 스크립트 상단에 로그 파일을 설정하고 전역 변수가 필요하지 않거나 파일 이름의 모든 항목을 변경하는 것을 기억하지 않고도 프로세스 전반에 걸쳐 로그 파일에 쓸 수 있습니다.
exec 3>> /tmp/somefile.log
...
echo "This is a log message" >&3
echo "This goes to stdout"
echo "This is written to stderr" >&2
이 구성은 쓰기용( 추가용, 읽기용 - 일반과 마찬가지로)을 위해 exec 3>dest
파일을 열고 파일 설명자 #3에 추가합니다. 그런 다음 설명자 #1을 얻습니다.dest
>>
<
표준 출력, #2는표준 에러, 그리고 이 문서의 새로운 #3 입니다 dest
.
당신은 가입할 수 있습니다표준 에러도착하다표준 출력- 와 같은 구문을 사용하여 exec 2>&1
스크립트 기간 내에 강력한 가능성이 많이 있습니다 . 문서( man bash
)에는 이에 대해 다음과 같은 내용이 나와 있습니다.
exec [-cl] [-a name] [command [arguments]]
지정된 경우command
셸을 대체합니다. [...]지정하지 않으면command
모든 리디렉션이 현재 셸 [...]에 적용됩니다.
답변2
파일에 텍스트를 추가하는 몇 가지 다른 방법은 다음과 같습니다.
티셔츠 사용
tee -a file <<< "text text text ..."
awk를 사용하세요
awk 'BEGIN{ printf "text text text ..." >> "file" }'
sed 사용
sed -i '$a text text text ...' file sed -i -e "\$atext text text ..." file
원천:
답변3
사용하다here-document
방법:
cat <<EOF >> file
> foo
> bar
> baz
> EOF
시험:
$ cat file
aaaa
bbbb
$ cat <<EOF >> file
> foo
> bar
> baz
> EOF
$ cat file
aaaa
bbbb
foo
bar
baz
답변4
Unix 파일 편집기를 사용하십시오. GNU
및 BSD
버전 모두 .
ed(1)
그리고 사용printf
printf '%s\n' '$a' 'foo bar baz' . w | ed -s file.txt
bash에 특화되어 있지만 좀 더 난해한 구문, $' '
쉘 인용 및herestring
ed -s file.txt <<< $'$a\nfoo bar baz\n.\nw'
ex(1)
그리고 사용printf
printf '%s\n' '$a' 'foo bar baz' . x | ex -s file.txt
$' '
bash에 특화되어 있지만 쉘 인용을 위한 좀 더 난해한 구문 과herestring
ex -s file.txt <<< $'$a\nfoo bar baz\n.\nx'