317

Linuxでシェルスクリプトを使用してテキストファイルにデータを自動的に書き込むにはどうすればよいですか?

ファイルを開くことができました。しかし、データの書き方がわかりません。

4

13 に答える 13

528

簡単な答え:

echo "some data for the file" >> fileName

ただし、echo理想的な方法で行末文字(EOF)を処理しません。したがって、複数の行を追加する場合は、次のようにしますprintf

printf "some data for the file\nAnd a new line" >> fileName

>>and演算子は、コマンドの出力をリダイレクト>するのに非常に便利です。これらは、他の複数のbashコマンドで機能します。

于 2012-06-22T18:59:35.780 に答える
165
#!/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
于 2013-08-14T08:40:33.233 に答える
69

コマンドの出力をファイルにリダイレクトできます。

$ cat file > copy_file

またはそれに追加します

$ cat file >> copy_file

直接書き込みたい場合、コマンドは次のとおりです。echo 'text'

$ echo 'Hello World' > file
于 2012-06-22T22:57:44.310 に答える
58
#!/bin/bash

cat > FILE.txt <<EOF

info code info 
info code info
info code info

EOF 
于 2014-04-24T20:58:52.000 に答える
29

これは非常に古い質問ですが、OPはスクリプトに関するものであり、googleが私をここに連れてきたという事実のために、読み取りと書き込みを同時に行うためにファイル記述子を開くことにも言及する必要があります。

#!/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

この例では、ファイルpoem.txtがファイル記述子3の読み取りと書き込みのために開かれます。また、* nixボックスは、stdin、stdout、およびstderr(fd 0,1,2)よりも多くのfdを認識していることも示しています。それは実際にたくさんあります。通常、カーネルが割り当てることができるファイル記述子の最大数は、/proc/sys/file-maxまたはで見つけることができますが、 /proc/sys/fs/file-max9を超えるfdを使用すると、シェルが内部で使用するfdと競合する可能性があるため危険です。したがって、気にせず、fdの0〜9のみを使用してください。bashスクリプトでさらに9つのファイル記述子が必要な場合は、とにかく別の言語を使用する必要があります:)

とにかく、fdは多くの興味深い方法で使用できます。

于 2017-05-27T21:50:39.237 に答える
17

私はこの答えが好きです:

cat > FILE.txt <<EOF

info code info 
...
EOF

ただし、cat >> FILE.txt << EOF既存のものを消去せずにファイルの最後に何かを追加したい場合は、

このような:

cat >> FILE.txt <<EOF

info code info 
...
EOF
于 2016-01-14T04:16:52.583 に答える
11

@lyconoの要求に応じて、私のコメントを回答として移動する

ルート権限でこれを行う必要がある場合は、次のようにしてください。

sudo sh -c 'echo "some data for the file" >> fileName'
于 2017-05-07T11:47:29.650 に答える
11

ヒアドキュメントが利用できない環境(MakefileDockerfileなど)の場合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
于 2018-06-02T06:31:09.697 に答える
9

完全に細かい答えがいくつかあると思いましたが、すべての可能性の簡潔な要約はありませんでした。したがって:

ここでのほとんどの回答の背後にあるコアプリンシパルはリダイレクトです。ファイルに書き込むための重要なリダイレクト演算子は次の2つです。

出力のリダイレクト:

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またcat >> FILE.txt <<EOF

同じリダイレクト演算子を使用しますが、「ヒアドキュメント」を介して別のレイヤーを追加します。上記の構文では、の出力を介してFILE.txtに書き込みますcat。書き込みは、対話型入力に特定の文字列(この場合は「EOF」)が与えられた後にのみ行われますが、これは任意の文字列にすることができます。例:

cat > FILE.txt <<'StopEverything'またcat >> FILE.txt <<'StopEverything'

同様に機能します。ヒアドキュメントでは、さまざまな区切り文字やその他の興味深い解析文字も検索されるため、ドキュメントで詳細を確認してください。

ヒア文字列

少し複雑で、リダイレクトとヒアドキュメント構文の両方を理解するための演習ですが、ヒアドキュメントスタイルの構文を標準のリダイレクト演算子と組み合わせて、ヒア文字列にすることができます。

cat入力の出力のリダイレクト

cat > myfile <<<'text to completely overwrite contents of myfile'

cat入力のリダイレクトされた出力を追加する

cat >> myfile <<<'text to completely overwrite contents of myfile'

于 2019-11-21T04:24:45.640 に答える
0

ヒアドキュメントと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挿入モードを開始し、同様にEscとZZでファイルを閉じます。

#This is my var in text file
var = Test
#Thats end of text file
于 2019-07-05T11:55:42.247 に答える
0

変数を使用している場合は、次を使用できます

first_var="Hello"
second_var="How are you"

両方の文字列を連結してファイルに書き込む場合は、以下を使用してください

echo "${first_var} - ${second_var}" > ./file_name.txt

file_name.txtの内容は「こんにちは-お元気ですか」になります

于 2021-02-03T16:04:15.223 に答える
0

このアプローチは機能し、最高です

cat > (filename) <<EOF
Text1...
Text2...
EOF

基本的に、テキストはファイルの書き込み/追加が終了するまでキーワード「EOF」を検索します

于 2022-03-02T07:21:36.750 に答える
-5

これが私の答えです。$catファイル>copy_file

于 2019-11-27T05:22:52.797 に答える