grep 検索グループ

grep 検索グループ

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)が続く行の結果セットが表示されます。

関連情報