これがシナリオです。大きな弦があり、その一部を別の弦に置き換えたいと考えています。
たとえば、「今日行を書いています」を変更するとします。 "から"私は今行を書いています "。
このクイックチュートリアルでは、Bashでネイティブにサブストリングを置き換える方法を紹介します。拡張機能としてsedコマンドの例も示します。
サブストリングをbashでネイティブに置き換えます(1行に適しています)
Bashには、文字列操作のための組み込みメソッドがいくつかあります。文字列の一部を別の文字列に置き換えたい場合は、次のようにします。
${main_string/search_term/replace_term}
「今日は行を書いています」という行で構成される文字列変数を引用符なしで作成し、today
を置き換えます。 now
:
[email protected]:~$ line="I am writing a line today"
[email protected]:~$ echo "${line/today/now}"
I am writing a line now
何が起こったのか理解しましたか?構文"${line/today/now}"
、lineは、文全体を格納した変数の名前です。ここでは、最初のオカレンスを置き換えるように指示しています。 today
という言葉の now
。したがって、元の変数の内容を表示する代わりに、変更された単語の行が表示されます。
したがって、line
変数は実際には変更されていません。それはまだ同じです:
[email protected]:~$ echo $line
I am writing a line today
ただし、必要な単語を確実に置き換えて、同じ変数を変更して、変更を永続的にすることができます。
[email protected]:~$ line="${line/today/now}"
[email protected]:~$ echo $line
I am writing a line now
これで変更が永続的になり、文字列内で最初に出現する部分文字列を永続的に置き換えることができます。
他の変数を使用して、置換する特定の部分文字列を格納することもできます。
[email protected]:~$ replace="now"
[email protected]:~$ replacewith="today"
[email protected]:~$ line="${line/${replace}/${replacewith}}"
[email protected]:~$ echo $line
I am writing a line today
ここでは、置換する単語をreplace
という変数に格納しました。 そして、それがreplacewith
内で置き換えられるという単語 。その後、上記と同じ方法で行を「修正」しました。これで、このチュートリアルの最初に行った変更が元に戻されました。
別の例を見てみましょう:
[email protected]:~$ hbday="Happy Birthday! Many Many Happy Returns!"
[email protected]:~$ hbday="${hbday/Many/So Many}"
[email protected]:~$ echo $hbday
Happy Birthday! So Many Many Happy Returns!
文字列内の複数の部分文字列を置き換えることもできます。別の例で見てみましょう:
[email protected]:~$ hbday="${hbday//Many/So Many}"
[email protected]:~$ echo $hbday
Happy Birthday! So Many So Many Happy Returns!
その余分な/
hbday
の後 Many
のすべての出現箇所を置き換えました So Many
文の中。
sedコマンドを使用して文字列を置き換えます(ファイルでも機能します)
bashの文字列内のサブ文字列を置き換える別の方法を次に示します。この方法でsedコマンドを使用します:
最初の出現を置き換える:
line=$(sed "s/$replace/s//$replacewith/" <<< "$line")
最初の例をとると、次のように再生できます。

g
を追加して、すべてのオカレンスを置き換えることもできます 最後に:
line=$(sed "s/$replace/$replacewith/g" <<< "$line")
さて、これはネイティブのbash文字列メソッドよりも複雑だと思うかもしれません。おそらく、しかしsedは非常に強力であり、sedを使用して、ファイル内の文字列のすべての出現箇所を置き換えることができます。
sed -i 's/$replace/$replacewith/' filename
タイトルに「殺人」が含まれているアガサ・クリスティの本の例を次に示します。
[email protected]:~$ cat agatha.txt
The Murder in the Vicarage
Murder in Mesopotamia
Murder is Easy
Murder on the Orient Express
Murder In Retrospect
両方が同じだと考える人もいるので、殺人を結婚に置き換えます:
sed -i "s/Murder/Marriage/g" agatha.txt
変更されたファイルは次のとおりです:
The Marriage in the Vicarage
Marriage in Mesopotamia
Marriage is Easy
Marriage on the Orient Express
Marriage In Retrospect

Sedは、Linuxでテキストファイルを編集するための非常に強力なツールです。少なくともその基本を学ぶ必要があります。
この記事を読んで楽しかったですか?文字列の置き換えやこの記事について何か共有したいことがあれば、下のコメントでそうしてください。