/ bin / sed -e 's#abc#zzz#g'で#文字はどういう意味ですか?


回答:


14

これは、と同じように"/"、と同じ's/abc/zzz/g'です。

これは、「abc」を検索して「zzz」で置き換え、グローバルフラグを指定することを意味します。つまり、最初のものだけでなく、その行のすべての「abc」に対しても実行します。

パターンアドレスに代替のセパレータを使用することもできますが、その場合は、正しく解釈されるようにエスケープする必要があります。

sed -r '\#abc#p'

24

それはだ、区切り文字またはセパレータ。最も一般的に使用されるものである/のように

sed 's/old/new/' file

ただし、sedはコマンドの後の最初の文字を区切り文字として使用します。たとえば、便利な文字を使用できます...

sed 's%old%new%' file

これは、ファイルに/(または他の従来の区切り文字)が含まれている場合に非常に役立ちます。区切り文字として、sed式に含める必要がないことがわかっている文字を選択できるので、煩わしいエスケープを大幅に節約できます。

置き換えたいとしましょう

/ubuntu//questions

/ubuntu//posts

あなたは使うことができます

sed 's/https:\/\/askubuntu.com\/questions/https:\/\/askubuntu.com\/posts/' file

しかし、使用する方が良い

sed 's|/ubuntu//questions|/ubuntu//posts|' file

それは価値がある、少なくともGNUにsedのことに注意されるかもしれない/以外の文脈で代替文字に置き換えることができますs(代替)コマンド-しかし、その場合には、それは最初の時間たとえば、エスケープする必要がありますsed '/foo/d'(削除行が一致するがfoo)なりsed '\#foo#d'
steeldriver

@steeldriver確かに!-私はRavexinaが彼の答えにそれを追加したのを見たので、私はおそらく私を離れます:)
Zanna

1
ストリームに区切り文字が含まれているかどうかは重要ではありません。重要なのは、検索文字列または置換文字列に区切り文字が含まれているかどうかです。
kasperd 2017年

@kasperdああ、そうです。私は少し編集しました:)
Zanna

@Zannaの答えは要点です。コマンド「s」の後の最初の文字は、このコマンドで使用されるセパレーターを決定します。ここでは任意の文字を使用できます。sbabebと同じs/a/e/です。
rexkogitans 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.