
正規表現を使用して、行末から 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 では、ドットは.
実際のドットを意味し、 は*
すべての文字を表すワイルドカードです。