私は、文字列を持っていることなどのように、単一の文字を囲む括弧付き:sed - 角かっこを文字に置き換えていますか?
[a]
が、私は括弧内の文字を取ると文字とブラケットを交換したいので、最終的な結果は次のようになります。
aaa
これは私が思い付いたものですが、それは動作しません:
sed 's/\[ \([a-z]\) \]/\2/g' < testfile
誰かが私を助けて、と説明していただけますなぜ私のコマンドは機能していないのですか?
私は、文字列を持っていることなどのように、単一の文字を囲む括弧付き:sed - 角かっこを文字に置き換えていますか?
[a]
が、私は括弧内の文字を取ると文字とブラケットを交換したいので、最終的な結果は次のようになります。
aaa
これは私が思い付いたものですが、それは動作しません:
sed 's/\[ \([a-z]\) \]/\2/g' < testfile
誰かが私を助けて、と説明していただけますなぜ私のコマンドは機能していないのですか?
私はあなたがいくつかの基本的な概念を忘れてしまったと思います。まずは
$ echo a | sed -r 's/(.)/\1\1/'
aa
括弧はグループを示し、\1
は、角括弧内の文字と一致し、それを3倍に、今、最初のグループ
を参照する単一の文字を複製してみましょう。
$ echo [a]b | sed -r 's/\[(.)\]/\1\1\1/'
aaab
大括弧の文字は正規表現で特別な意味を持つため、エスケープする必要があります。重要なのは、括弧の中にあなたが興味を持っている正規表現を括弧でくくって、\{number}
という表記で同じ順序でそれらを参照しなければならないということです。
問題あなたの摂餌sed 's/\[ \([a-z]\) \]/\2/g' < testfile
で:
1) The pattern has only one group \([a-z]\), so \2 is invalid;
2) The pattern contains space, there is no match found;
3) To replace brackets, you need to capture them in a group.
私の考えは、パターン内のすべてのグループをキャッチし、\2\2\2
でそれらを置き換えるために、次のとおりです。
echo "[a]" | sed 's/\(\[\)\([a-z]\)\(\]\)/\2\2\2/g'
それとも
echo "[a]" | sed 's/\(.\)\(.\)\(.\)/\2\2\2/g'
出力は
です。aaa
次のコードを試してみてください。
$ echo "[a]" | sed 's/\[\([a-zA-Z]\)\]/\1\1\1/g'
または
$ echo "[a]" | sed -r 's/\[([a-zA-Z])\]/\1\1\1/g'
を出力:
aaa
ためのパターン内のスペースは何ですか?どのパターン(パターンから)が '\ 2 'になるのでしょうか? 5文字を1文字に置き換えています。それはあなたが意味することですか? –
スペースを削除し、 '\ 1'を3倍します。つまり、' sed 's/\ [\([az] \)\]/\ 1 \ 1 \ 1/g " –
' sed -e' s/[\(。\)\]/\ 1 \ 1 \ 1/g '' – DigitalRoss