一部のコンテンツ(下のコードに表示される最初、2番目、3番目のスペースを含む)を追加したいファイルがあります。
###私はテキストメッセージ1です ###私はテキストメッセージ2です
(私が添付した実際のテキストはこの5行よりはるかに長いです。)
単にファイルにコンテンツを追加するには、次の手順を実行します。
cat <<-"EOF" >> myPath/myFile
content...
EOF
しかし、ファイルにコンテンツがまだ存在しない場合にのみ、ここにドキュメントにコンテンツを追加させるにはどうすればよいですか?それ以外の場合、ジョブは中断されます。
ファイルに部分ブロックの内容しかない場合は、操作全体を中断する必要があります。
答え1
文書がない場合にのみここに文書を追加する場合は、次のものを使用できますgrep
。
cat <<-"EOF1" > myPath/myFile.append
content...
EOF1
if ! grep -F -q -f myPath/myFile{.append,}; then
cat myPath/myFile.append >> myPath/myFile
fi
これを理解するには、次の点を考慮してください。
grep -F -q -f myPath/myFile{.append,}
シェルに拡張されましたgrep -F -q -f myPath/myFile.append myPath/myFile
。この
grep
コマンドは、myPath/myFile
(追加するテキストを含むファイル)-F
に含まれる固定文字列()を検索し(必要に応じてmyPath/myFile.append
テキストを追加する必要があるファイル)、-f
1行に1つのパターン()を読み取り、固定文字列を見つけた場合にのみ表示します。します。文字列():そうです。終了コード、出力なし(-q
)。その後、結果は反転され、
!
何も見つからなかった場合にのみブロックの一部が実行されますif
。then
grep
答え2
この答えを承認しないでください。しかし、Stephenの答えを正しいとマークしました。これは私が読みやすく変形したものです。
テンプレートファイルの内容が最終ファイルにまだ存在しない場合にのみ最終ファイルに追加する必要がある場合は、次のものを使用できますgrep
。
cat <<-"EOF1" > myPath/myTemplate
content...
EOF1
if ! grep -F -q -f myPath/myFile myPath/myTemplate; then
cat myPath/myTemplate >> myPath/myFile
fi
このコマンドは()grep
に含まれるmyPath/endFile.sh
固定文字列を検索し、1行に1つのパターンを読み取り()のみを渡します。-F
myPath/myTemplate
-f
終了コード、出力なし(-q
)。
その後、結果が反転して!
最終ファイル内のどの項目とも一致しない場合にのみthen
ブロックが実行されます。if-then
grep
付録 - 終了コード:
プロセスが終了すると、小さな整数である終了コードを返します。通常、終了コード 0 は成功を示し、0 でない場合は失敗またはエラーを示します。
grep
一致するものがある場合は0を返し、一致するものがない場合は1を返します。if
引数の終了コードを使用して、実行するアクションを決定します。 0の場合はブロックを処理しthen
、それ以外の場合はelse
ブロック(存在する場合)を処理します。句読点(
!
)は反転できます。このthen
ブロックは、grepが何も一致しない場合(またはエラーが発生した場合)にのみ実行されます。