行末から2つの点を削除します

行末から2つの点を削除します

正規表現を使用して、行末から 2 つのドットまで遡るすべてのテキストを削除する必要があります。

gtk2-2.24.22-2.fc20.x86_64

なる

gtk2-2.24.22-2

これはテキスト ファイルへの出力でありrpm -qa、末尾を切り取る必要があります。

答え1

あなたは必要正規表現ですか? これは少し安っぽい解決策だとは思いますが、正規表現はすべての問題の解決策ではありません。

たとえば、Bash の文字列操作の場合:

foo="gtk2-2.24.22-2.fc20.x86_64"
echo ${foo%.*.*} # strip the longest match from the last dot

戻り値gtk2-2.24.22-2

次のようにファイルで呼び出すことができます:

foo=$(head -1 file.txt)
echo ${foo%.*.*} > new-file.txt

正規表現は、左から右へ「貪欲に」消費するため、後ろからではなく、先頭から何かを解析するのに適しています。実行可能ですが、単純な Bash で実行できるよりも少し冗長にする必要があります。

Bash で正規表現のように見えるもの ( .*) は、「実際の」正規表現ではないことに注意してください。実際の正規表現では、ドットは.すべての文字を表し、 は*前の文字 (グループ) が 0 ~ n 回繰り返されることを意味します。ただし、Bash では、ドットは.実際のドットを意味し、 は*すべての文字を表すワイルドカードです。

関連情報