sed \1\2\3 のようなグループを grep する方法を学ぶのに問題があります。たとえば、/etc/services ファイルをフィルタリングしてすべてのポートを区別します。私がしていること:
~$ grep -E '[0-9]{1,5}/(tcp|udp)' /etc/services
これで「ポート/プロトコル」が表示されます。次にグループ化しようとしています。
~$ grep -E '\([0-9]{1,5}\)/(tcp|udp)' /etc/services
効果はありません。さて、拡張されていないgrepを試してみてください。
~$ grep '\([0-9]*\)/[tcp\|udp]\1' /etc/services
ただし、結果が正しくありません(/ tまたは/ u)。では、グループをどのように使用しますか?
答え1
正規表現の逆参照を参照しています。
次の2つの参考資料を確認してください。
https://stackoverflow.com/questions/4609949/what-does-1-in-sed-do
http://www.gnu.org/software/grep/manual/html_node/Back_002dreferences-and-Subexpressions.html
出力を見ると、grep '\([0-9]\)\1' /etc/services
数字の直後に同じ数字(逆参照\ 1)が続く行の結果セットが表示されます。