ファイルにコンテンツを追加しようとしました。
printf "\nsource ~/script.sh" >> /etc/bash.bashrc
echo -e "\nsource ~/script.sh" >> /etc/bash.bashrc
cat >> "/etc/bash.bashrc" <<< "source ~/script.sh"
3つの方法すべてが機能します。cat
ここで文字列は最後から読む必要があるので(にcat
追加した後)、あまり快適ではないと思います。[end]
[start]
どの方法も自動的に行を壊さず、\n
個人的に最後の手段として and 構文を使用します。また、ここに文字列に改行文字を追加する方法がわからず、この方法でそのような方法が見つかりませんでした。printf
echo
文書。
私が探しているのは、パラメータや構文を追加せずに行を自動的に削除できるユーティリティです。 nixテキスト処理ユーティリティについて読みましたが、目的のものが見つかりませんでした。そのようなユーティリティを知っていますか?
答え1
cat
「間違った方向」という行を書く必要はありません。これは問題なく動作します(もちろん、ここの文字列の矢印はまだ奇妙な方向を指します)。
$ cat <<< "some text" >> testfile
$ cat testfile
some text
コメントで述べたように、here-stringは末尾に改行文字を追加しますが、withprintf
とecho
youは次のように使用します。\n
前にひも。
echo
ここにある文字列のように、通常は末尾の改行が追加されるので、これが必要なすべてであればecho
大丈夫でしょう(ほとんどのシェルに組み込まれた関数です。)
すべてのコマンドは改行で若干異なる動作をします。
cat >> file <<< "string" # newline at end
printf "\nstring" >> file # newline at beginning
echo -e "\nstring" >> file # newline at beginning and at the end
正直なところ、私はこの表記に慣れるのが最善だと思います\n
が、気に入らない場合は常にここに文書があります(先行および末尾の改行がここに含まれています)。
cat >> file <<EOF
some text
EOF
答え2
ファイルが改行で終わる場合(すべての正しいPOSIXテキストファイルがそうであるように)、改行を追加する必要はありません。今後ファイルに追加するテキストです。
ファイルが改行文字で終わるかどうかを確認する 1 つの方法は、次のコマンドを実行することです。
$ sed -i -e '$a\' file
改行文字が追加されます。ただファイルに改行文字がない場合。
その後、必要なテキストと改行文字を追加して、テキストファイルがまだ改行文字で終わっていることを確認できます。
a="source ~/script.sh"
echo -e "$a" >> file # with trailing new line
printf "$a\n" >> file # with trailing new line
<<< "$a" cat >> file # with trailing new line
catコマンドの順序が公開された順序と変更されました。
必要なら追加新しい行を起動するには、次を使用します。
a="source ~/script.sh"
{ echo; echo -e "$a" ; } >>file
echo -e "\n$a" >>file
printf '%b' "\n$a\n" >>file
a=$'\nsource ~/script.sh'
<<<"$a" cat >>file
catオプションを使用してさらに改行したい場合は、以下を使用してください。
a=$'\nsource ~/script.sh\n'
<<<"$a" cat >>file
これは追加されます二つ末尾の新しい行、変数の1行、(ここでは文字列)$a
から(必然的に)1行。<<<
答え3
可能なので、append
Pythonでコマンドを実行する方法は次のとおりです。
#!/usr/bin/env python
import sys
with open(sys.argv[2],"a") as f:
f.write(sys.argv[1] + "\n")
そしてこのように動作します。
$ echo "first line" > input.txt
$ ./append "Hello Unix.se" input.txt
$ cat input.txt
first line
Hello Unix.se