GNU/Linux >> Linux の 問題 >  >> Linux

Bashで文字列を置き換える

BashはUNIXシェル互換のコマンドプロセスであり、その主なタスクはシェル環境で実行される文字列を操作することです。プログラマーは、さまざまなファイルで作業するように求められることがあります。作業に合わせて、ファイルの一部または全体を追加、削除、および置換できます。これは、bashの文字列を置き換える知識を必要とします。データストレージは、データの性質に応じて、一時的または永続的にすることができます。ファイルの内容を置き換える場合は、ファイル文字列が不可欠です。

Bashでの文字列の置き換え

sed は不可欠であり、ファイル内の文字列をbashスクリプトに置き換えるのに役立ちます。文字列エディタは、bashのファイルの内容を置き換えるためにさまざまな方法で使用できます。別の、しかし健全な文字列エディタはawkであり、bashを使用してファイルから文字列値を置き換えるときに使用できます。この記事では、bashでファイルの内容を置き換える方法を例を挙げて説明します。正規表現パターンの知識は、bashの文字列を置き換えるときにも非常に役立つ可能性があることに注意してください。

Bash文字列操作

マイナーまたは単純な交換を行う場合、sedは必要ありません。 Bashは操作を行うことができます。

例:
fosslinux.gifを.mp4に置き換える場合、sedは必要ありません。
bashを使用してプロセスを実行するには、以下のコード化されたテキストを使用します。

#/bin/bash
file_name="fosslinux.gif"
new_extension="mp4"

# Replace .gif with .mp4
generated_file_name=${file_name/.gif/.$new_extension}

echo $generated_file_name
に置き換えます

sedを使用した文字列の置き換え

sedはストリームエディタと呼ばれることがあります。 Sedはファイル内の文字列を置き換えることができます。次の情報を含むsingleboardbytes.txtというファイルの例を見てみましょう。
FossLinuxは、あらゆるLinuxユーザーにとって優れた学習サイトです。 FossLinuxが彼らのサイトで公開している記事をチェックしてください。

ファイルから、「サイト」という単語を置き換える必要があります 」と「ウェブサイト 」をクリックし、ファイルの名前を fosslinux.txtに変更します。 。

sed構文を理解する

sed -i 's/search_string/replace_string/' filename
sed – is the command used in the execution of the above syntax
‘-i’ – used in the modification of contents in the original file with a replacement string aid whenever the search value exists in the file.
‘s’ – this is the substitute command
‘search_string’ – this represents the string value that is to be searched for replacement in the original file
‘replace_string’ – this represents the string value that is used to replace the searched value. The string should match the string found by the ‘search_string’ command.
‘filename’ – this is the filename whereby the replacement will be applied.

端末で次のコマンドを実行します。

sed 's/site/website/g' singleboardbytes.txt > fosslinux.txt

注:上記のコマンドをbashスクリプトとして実行することで実行することもできます。
-iを使用して置き換える コマンド

コマンドを実行した後、次のステップは -iを使用して置き換えることです 指図。 -i は「インプレース」の表現です。つまり、ファイルは置き換えられるだけで、余分なファイルは作成されません。上記の例を使用して、次のコマンドを実行します。

sed -i 's/site/website/g' singleboardbytes.txt

次の図から、「/ home / tuts/singleboardbytes.txtがディスク上で変更されました」という感嘆符が表示されます。これは、変更が正常に行われたことを示しています。

次の図は、ファイル名(singleboardbytes.txtからfosslinux.txt)とサイトという単語の両方に対して、前の手順で行った変更を含むファイルです。 ウェブサイトに変更されました 。

検索値および置換としての変数の使用

少し補間するだけで、変数を使用して文字列を置き換えることができます。この場合、最初のsed引数は、一重引用符ではなく二重引用符を使用する必要があります。たとえば、コードは次のようになります。

tuts() {
local search=$1
local replace=$2

# Note the double quotes
sed -i "s/${search}/${replace}/g" singleboardbytes.txt
}
に注意してください

sedには2つのフレーバーがあります。すなわち、 FreeBSD およびLinuxsed 。 LinuxディストリビューションはLinuxsedを使用し、OSXユーザーはFreeBSDsedを使用します。これらのフレーバーはまったく異なるため、あるsedフレーバーから別のsedフレーバーにコマンドを転送することはできません。

たとえば、FreeBSDを使用してファイルの内容を置き換える場合、.bak拡張子を使用してバックアップを実行する必要があります。または、以下のbash構文に示すように、-i表記の直後に空の引用符のペアを使用してバックアップを開始できます。

tuts() {
local search=$1
local replace=$2

sed -i "" "s/${search}/${replace}/g" singleboardbytes.txt
}

上記の構文コードに示されているように、FreeBSDの使用中にバックアップが実行されない場合、以下に示すようなエラーが発生します。

sed: 1: "/Users/user/path/tuts ...": extra characters at the end of h command

sedコマンドを使用してファイルを置き換えて数字のパターンを一致させる方法

スクリプトを正常に実行すると、ファイルに存在するすべての数値コンテンツの検索が実行されます。次に、コンテンツは数字の前に$を追加することで置き換えられます。

#!/bin/bash
# Check the command line argument value exists or not
if [ $1 != "" ]; then
# Search all string containing digits and add $
sed -i 's/\b[0-9]\{5\}\b/$&/g' $1
fi
を追加します

awkコマンドを使用した文字列の置換

この場合、ファイルの内容を置き換えるために、sedコマンドの代わりにawkコマンドを使用します。これらのコマンドの違いは、sedコマンドが元のファイルを直接更新することです。これはawkコマンドの場合とは異なります。

#!/bin/bash
# Check the command line argument value exists or not
if [ $1 != "" ]; then
# Search all string based on date
awk '{sub("02/06/2020","12/06/2020")}1' $1 > temp.txt && mv temp.txt $1
fi

結論

上記の例は、Bashで文字列を置き換える方法を学習する上で不可欠です。したがって、それを上手にするには、定期的に練習する必要があります。ファイル内の文字列の検索と置換は複雑に思えるかもしれませんが、ガイドラインに正しく従えば、はるかに管理しやすくなります。

注意すべき点は、コマンドの実行は管理しやすいように見える場合もありますが、sedから大混乱を引き起こさないように注意する必要があります。間違ったコマンドを入力すると、コンピュータが破損し、データの損失などの問題が発生します。したがって、安全のために、常にコードをそのままコピーして端末に貼り付けてください。これにより、マシンを壊す可能性のあるスペルミスを防ぐことができます。この記事が、この記事を使用してbashの文字列を置き換える方法を学ぶのに役立つことを願っています。


Linux
  1. バッシュ‘?

  2. Bash で、ファイルの各行の後に文字列を追加するにはどうすればよいですか?

  3. テキスト ファイル内の文字列を削除する

  1. ファイル内の文字列を置き換える方法は?

  2. SedでBash文字列変数への参照を使用しますか?

  3. 「bash -c」は何をしますか?

  1. bashのフォルダ内の各ファイルの先頭に文字列を追加するにはどうすればよいですか?

  2. Linux bash、ダッシュで区切るキャメルケース文字列

  3. bashスクリプトは、ファイルの最初の行にテキストを追加します.