新しい行の下にコンテンツをリダイレクトする(追加の構文やパラメータは必要ありません)

新しい行の下にコンテンツをリダイレクトする(追加の構文やパラメータは必要ありません)

ファイルにコンテンツを追加しようとしました。

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 構文を使用します。また、ここに文字列に改行文字を追加する方法がわからず、この方法でそのような方法が見つかりませんでした。printfecho文書

私が探しているのは、パラメータや構文を追加せずに行を自動的に削除できるユーティリティです。 nixテキスト処理ユーティリティについて読みましたが、目的のものが見つかりませんでした。そのようなユーティリティを知っていますか?

答え1

cat「間違った方向」という行を書く必要はありません。これは問題なく動作します(もちろん、ここの文字列の矢印はまだ奇妙な方向を指します)。

$ cat <<< "some text" >> testfile
$ cat testfile
some text

コメントで述べたように、here-stringは末尾に改行文字を追加しますが、withprintfechoyouは次のように使用します。\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

可能なので、appendPythonでコマンドを実行する方法は次のとおりです。

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

関連情報