Linux上のBashでのすべての文字列操作のリスト
Linuxが十分に備えているものがあるとすれば、それは文字列操作ユーティリティです。しかし、Bashシェルに組み込まれている機能はたくさんあります。使用方法は次のとおりです。
文字列操作
Linuxエコシステムには、テキストと文字列を操作するための素晴らしいツールが含まれています。これらには、awk、grep、sed、cutが含まれます。重いテキストの論争については、これはあなたの選択であるべきです。
ただし、特に短くて単純なスクリプトを作成する場合は、シェルの組み込み機能を使用すると便利な場合があります。スクリプトを他の人と共有してそのコンピューターで実行する場合、標準のBash機能を使用すると、他のユーティリティの可用性やバージョンについて心配する必要がなくなります。
特殊なユーティリティの能力が必要な場合は、必ずそれらを使用してください。それが彼らの目的です。しかし、多くの場合、スクリプトとBashは独自に仕事をすることができます。
これらはBashに組み込まれているため、スクリプトまたはコマンドラインで使用できます。ターミナルウィンドウでそれらを使用すると、コマンドのプロトタイプを作成して構文を改善するための迅速で簡単な方法です。これにより、編集、保存、実行、およびデバッグのサイクルが回避されます。
文字列変数の作成と操作
変数を宣言して文字列を割り当てるには、変数に名前を付け、等号を使用し=
て文字列を指定するだけです。文字列にスペースが含まれている場合は、一重引用符または二重引用符で囲みます。等号の両側にスペースがないことを確認してください。
my_string="Hello, How-To Geek World."
echo $my_string
変数を作成すると、その変数の名前がシェルのタブ補完ワードリストに追加されます。この例では、「my_」と入力してコマンドラインで「Tab」キーを押すと、フルネームが入力されました。
読み取り専用変数
declare
変数を宣言するために使用できるコマンドがあります。単純なケースでは、それは必要ありませんが、それを使用すると、いくつかのコマンドオプションを使用できます。-r
おそらく、 (読み取り専用)オプションを最も頻繁に使用します。これにより、変更できない読み取り専用変数が作成されます。
declare -r read_only_var="This is an immutable string!"
新しい値を割り当てようとすると失敗します。
read_only_var="A new string..."
ターミナルウィンドウへの書き込み
echoまたはprintfを使用してターミナルウィンドウに複数の行を書き込み、1行のように見せることができます。また、独自の文字列変数に限定されず、コマンドに環境変数を含めることができます。
user_account="Your user account is:"
echo $user_account $USER
文字列の連結
plus-equals演算子 +=
を使用すると、2つの文字列を一緒に「追加」できます。これはユニオンと呼ばれます。
user_account="Your user account is:"
user_account+=$USER
echo $user_account
連結された文字列の間にスペースが自動的に追加されないことに注意してください。スペースが必要な場合は、最初の行の終わりまたは2番目の行の先頭に明示的に配置する必要があります。
user_account="Your user account is: "
user_account+=$USER
echo $user_account
ユーザー入力の読み取り
宣言の一部として内容が定義されている文字列変数を作成することに加えて、ユーザー入力を文字列変数に読み込むことができます。
このコマンドはread
ユーザー入力を読み取ります。(-p
プロンプト)オプションは、ターミナルウィンドウにプロンプトを書き込みます。ユーザーの入力は文字列変数に格納されます。この例では、変数はと呼ばれuser_file
ます。
read -p "Open which file? "user_file
echo $user_file
入力をキャプチャするための文字列変数を指定しなくても、引き続き機能します。ユーザー入力は、という名前の変数に格納されますREPLY
。
read -p "Open which file? "
echo $REPLY
通常は、独自の変数を指定して、意味のある名前を付ける方が便利です。
文字列操作
作成時に定義された文字列、ユーザー入力から読み取られた文字列、または文字列を連結して作成された文字列ができたので、それらを使用して作業を開始できます。
文字列の長さを見つける
#
文字列の長さを知ることが重要または有用な場合は、変数名の前にポンド記号””を付けることで取得できます。
my_string="There are 39 characters in this string."
echo ${#my_string}
文字オフセットによる部分文字列の抽出
文字列の開始点とオプションの長さを指定することにより、文字列変数から部分文字列を抽出できます。長さを指定しない場合、サブストリングには開始点から最後の文字までのすべてが含まれます。
開始点と長さは、変数名の後にコロン「:
」を挟んで続きます。文字列変数の文字には、ゼロから始まる番号が付けられていることに注意してください。
long_string="Frankenstein or the Modern Prometheus"
substring=${long_string:0:12}
echo $substring
echo ${long_string:27}
別のオプションを使用すると、文字列の末尾からいくつかの文字を省略できます。基本的に、これにより、開始点を設定し、長さとして負の数を使用できます。サブストリングには、ストリングの開始点から終了までの文字から、負の数で指定した文字数を引いたものが含まれます。
my_string="alphabetical"
echo ${my_string:5:-4}
いずれの場合も、元の文字列変数は変更されません。「抽出された」部分文字列は、実際には変数の内容から削除されません。
区切り文字による部分文字列の抽出
文字オフセットを使用することの欠点は、抽出する部分文字列が文字列のどこにあるかを事前に知っておく必要があることです。
文字列が繰り返し文字で区切られている場合、文字列内のどこにあり、どのくらいの長さであるかを知らなくても、部分文字列を抽出できます。
文字列の先頭から検索するには、変数名の後に二重パーセント記号 %%
、、区切り文字、およびアスタリスク、を続けます*
。この行の単語はスペースで区切られています。
long_string="first second third fourth fifth"
echo ${long_string%%' '*}
これは、区切り文字を含まない文字列の先頭から最初の部分文字列を返します。これは、短い部分文字列オプションと呼ばれます。
long substringパラメーターは、文字列の先頭から最後に分離された部分文字列までを返します。つまり、最後に区切られた部分文字列が省略されます。構文的には、唯一の違いは、コマンドが単一のパーセント記号” %
“を使用することです。
long_string="first second third fourth fifth"
echo ${long_string%' '*}
ご想像のとおり、文字列の末尾から同じように検索できます。パーセント記号の代わりに、ポンド記号 ” #
“を使用し、コマンドのアスタリスク””の後に区切り文字を移動します*
。
long_string="this.long.string.of.words.is.delimited.by.periods"
echo ${long_string##*.}
これは短い部分文字列パラメーターであり、区切り文字を含まない文字列の最後にある最初の部分文字列を切り取ります。
long_string="this.long.string.of.words.is.delimited.by.periods"
echo ${long_string#*.}
long substringオプションは、文字列の先頭から最初の区切り文字までの文字列の後ろを返します。つまり、最初に区切られた部分文字列が省略されます。
部分文字列の置換
サブストリングを他のサブストリングに置き換えるのは非常に簡単です。形式は、文字列の名前、置換される部分文字列、および挿入される部分文字列であり、スラッシュ「/
」で区切られます。
string="blue pig giggles"
echo ${string/pig/goat}
検索を文字列の最後に制限するには、検索文字列の前にパーセント記号「%
」を付けます。
string="blue pig giggles"
echo ${string/%giggles/chuckles}
検索を文字列の先頭に限定するには、検索文字列の前にポンド#
記号「」を付けます。
string="blue pig giggles"
echo ${string/#blue/yellow}
文字列は柔軟です
文字列が正確に必要なものではない場合、これらのツールは、ニーズに合わせて文字列を再フォーマットするのに役立ちます。複雑な変換の場合は専用のユーティリティを使用し、微調整の場合はシェルの組み込みツールを使用して、外部ツールのダウンロードと実行のオーバーヘッドを回避します。
コメントを残す