web-dev-qa-db-ja.com

\ 1 in sedは何をしますか?

この質問は、私が望んでいたものに本当に関連していることがわかりました: Unixでawkまたはsedを使用した解析 、しかし、次のことを理解できません:

's/\([,=]\) /\1/g'

Gはグローバルな置換を行うことを知っていますが、質問のコンテキスト内で何が起こっているのか実際には理解できません。

20
Abdullah Jibaly

以下に簡単な例を示します。

$ echo 'abcabcabc' | sed 's/\(ab\)c/\1/'
ababcabc
$ echo 'abcabcabc' | sed 's/\(ab\)c/\1/g'
ababab
$ echo 'abcabcabc' | sed 's/\(ab\)\(c\)/\1d\2/g'
abdcabdcabdc

最初のコマンドでは、最初の一致のみが影響を受けます。 2番目のコマンドでは、すべての一致が影響を受けます。どちらの場合でも、\1はエスケープされた括弧でキャプチャされた文字を指します。

3番目のコマンドでは、2つのキャプチャグループが指定されています。それらは、\1および\2を使用して参照されます。最大9つのキャプチャグループを使用できます。

g(グローバル)演算子(または、それなしの最初の一致)に加えて、特定の一致を指定できます。

$ echo 'aaaaaa' | sed 's/a/A/4'
aaaAaa
38

\(...\)は、かっこ内で指定された文字をキャプチャし、\1は最初の一致を参照するために使用されます。これは正規表現の一部です。

14
meder omuraliev