sed 's~ ~~g'
Linuxシステムのシェルスクリプトで1行が見つかりました。これは何ですか~
?
答え1
sed
これはAlternative()コマンドの代替区切り文字ですs
。通常、 のようs/pattern/replacement/
にスラッシュが使用されますが、sed
ほとんどすべての文字が許可されます。
/
代替式に別の区切り文字を使用する主な理由sed
は、式がリテラル文字/
に対して機能するためです。
たとえば、パスを/some/path/here
次に置き換えるに/other/path/now
は
s/\/some\/path\/here/\/other\/path\/now/
これは通常、次の問題の影響を受けます。「傾いたつまようじ症候群」、これは正しく読み、維持するのが難しいことを意味します。
代わりに、他の式の区切り文字を使用できます。
s#/some/path/here#/other/path/now#
~
有効な代替式区切り文字を使用する別の例です。
あなたの表情
s~ ~~g
同じですか?
s/ //g
入力のすべてのスペースを削除します。この場合、/
パターンや置換はすべて含まれないため、他の区切り文字を使用する必要はありません/
。
同じタスクを実行する別の方法は次のとおりです。
tr -d ' ' <infile >outfile
答え2
これは代替区切り記号です。最も一般的に使用される区切り文字はスラッシュです/
。ただし、sed
どの文字も区切り文字として使用できます。これにより、自動的に次の文字が区切りs
文字として使用されます。
sed 's@ @@g'
sed 's+ ++g'
sed 's\ \\g'
sed 's* **g'
スペースを区切り文字として使用することもできます。
echo "foo" | sed 's foo bar g'
/
最も一般的に使用される他の区切り文字は、構文内のコマンドにスラッシュが多いと混乱する可能性があります。複数のスペースを単一のスペース文字に変換する場合を考えてみましょう。
echo " a b c " | sed 's/\s\{1,\}/ /g'
君は走れるよ
echo " a b c " | sed 's~\s\{1,\}~ ~g'
これがより明確です。