bashスクリプトでsedまたはgrepを使用して、ファイルが特定の文字列で終わっていることを確認してください。

bashスクリプトでsedまたはgrepを使用して、ファイルが特定の文字列で終わっていることを確認してください。

私のUbuntuサーバーにoutput.txtというファイルがあります。 sedまたはgrepを使用して、ファイルの最後の2文字が「nt」であることをどのように確認できますか?ファイルのテキストは次のとおりです。 ifステートメントを返したいです。このような状況では本当です。

上院は9月までに連邦政府の一部に資金を支援するための6つの法案パッケージを通過させ、部分的な政府閉鎖を近く避けました。

上院は法案を75代22に通過させ、深夜締め切りを控え、バイデン大統領の机に法案を送った。

バイデン氏は土曜日に法案に署名すると予想されます。

共和党は、移民関連措置やその他の措置に対する修正案の表決を要求し、法案通過を遅らせ、資金が使い果たされた後、土曜日まで最終表決を延期すると脅した。

チャック・シューマー民主党上院院内代表は、表決に先立ち「韓国に良いニュースがある」と話した。

「私たちは帽子、退役軍人、環境、住宅などのための重要なプログラムに引き続き資金を提供し続けます。今日のパートナーシップの結果、私たちは政府に全額資金を提供するという目標に向かって大きな進歩を遂げました。

ベストアンサー1

sed私は本当にor hereを使用しませんgrep。できますが、私の考えはtail簡単です。ファイルの最後の3バイトを取得するために使用されますtail(末尾の文字を説明するには3バイトが必要です)(各文字が1バイトを超える可能性があるより複雑なUnicode文字列を見つける場合は\n機能しませんnt)。一致するものがあることを確認してくださいnt

if [ "$(tail -c3 file)" = "nt" ]; then 
  echo yes
else
  echo no
fi

grepたとえば、ファイル全体(NUL文字が含まれていないと仮定)を単一の「行」として扱い、最後の文字を確認してGNUを使用してこれを実行できます。

if grep -qPz 'nt\n$' file; then
 echo yes
else
 echo no
fi

または、sedよりよく、簡単に次のようなものを使用してください(または@steeldriverGNU固有の方法):

if [ "$(sed -n '${/nt$/p;}' file | wc -c)" -gt 0 ]; then 
  echo yes; 
else 
  echo no
fi

でもperl:

if perl -ne '$l=$_; }{ exit($l=~/nt$/ ? 0 : 1)' file; then 
 echo yes
else
 echo no
fi

おすすめ記事