すでに引用符で囲まれているsed式で一重引用符をエスケープするにはどうすればよいですか?
例えば:
sed 's/ones/one's/' <<< 'ones thing'
すでに引用符で囲まれているsed式で一重引用符をエスケープするにはどうすればよいですか?
例えば:
sed 's/ones/one's/' <<< 'ones thing'
回答:
引用sed
二重引用符でコードを:
$ sed "s/ones/one's/"<<<"ones thing"
one's thing
何百ものバックスラッシュでコードをエスケープするのは好きではありません–目を痛めます。通常、私は次のようにします。
$ sed 's/ones/one\x27s/'<<<"ones thing"
one's thing
sed -i
、特別な理由はありますか?
1つのトリックは、隣接する文字列のシェル文字列連結を使用し、シェルエスケープを使用して埋め込み引用符をエスケープすることです。
sed 's/ones/two'\''s/' <<< 'ones thing'
two's thing
sed式には3つの文字列があり、シェルはそれをつなぎ合わせます。
sed 's/ones/two'
\'
's/'
それが他の誰かを助けることを願っています!
sed 's/ones/two''s/' <<< 'ones thing'
いいえ、出力しますtwos thing
。'
出力にがありません。あなたはこの答えで説明されている方法でそれをしなければなりません。
sedコマンドの外側で二重引用符を使用するだけです。
$ sed "s/ones/one's/" <<< 'ones thing'
one's thing
ファイルでも機能します。
$ echo 'ones thing' > testfile
$ sed -i "s/ones/one's/" testfile
$ cat testfile
one's thing
文字列内に一重引用符と二重引用符がある場合は、それでも問題ありません。二重引用符をエスケープするだけです。
たとえば、このファイルには、一重引用符と二重引用符の両方を含む文字列が含まれています。sedを使用して一重引用符を追加し、いくつかの二重引用符を削除します。
$ cat testfile
"it's more than ones thing"
$ sed -i "s/\"it's more than ones thing\"/it's more than one's thing/" testfile
$ cat testfile
it's more than one's thing
これはちょっとばかげていますが、私は仕事に入ることができませんでし\'
たsed 's/ones/one\'s/'
。私はこれを調べて、Angularimport 'hammerjs';
を使用してsrc/main.ts
ファイルに自動的に追加するシェルスクリプトを作成していました。
私が仕事に取り掛かったのはこれです:
apost=\'
sed -i '' '/environments/a\
import '$apost'hammerjs'$apost';' src/main.ts
したがって、上記の例では、次のようになります。
apost=\'
sed 's/ones/one'$apost's/'
なぜそれ\'
だけでは機能しないのかわかりませんが、あります。
これは警官のように聞こえるでしょうが、文字列に一重引用符と二重引用符の両方が含まれていると、sedが機能することはありませんでした。私のような問題を抱えている初心者を助けるために、1つのオプションは文字列を分割することです。100を超えるindex.hmtlファイルのコードを置き換える必要がありました。文字列には一重引用符と二重引用符の両方が含まれていたため、文字列を分割して、最初のブロックを<!--
に、2番目のブロックをに置き換えました
-->
。それは私のindex.htmlファイルを台無しにしましたが、それは機能しました。
異なるスラッシュとの混同を避けるために、「:」のような代替の文字列区切り文字を使用してください
sed "s:ones:one's:" <<< 'ones thing'
または一重引用符を強調したい場合
sed "s:ones:one\'s:" <<< 'ones thing'
両方が戻る
one's thing