以下の条件でbashシェルスクリプト内の文字列を分割したいと考えています。
1) 区切り文字は変数です
2) 区切り文字は複数文字です
例:
A quick brown fox
var=brown
A quick
文字列をandに分割したいのですbrown fox
が、変数var
を区切り文字として使用し、そうではありませんbrown
#!/bin/bash
#variables according to the example
example="A quick brown fox"
var="brown"
#the logic (using bash string replacement)
front=${example%${var}*}
rear=${example#*${var}}
#the output
echo "${front}"
echo "${var}"
echo "${rear}"
100% bash 内部コマンドで実行できます。
#!/bin/bash
#variables according to the example
example="A quick brown fox"
var="brown"
#the logic (using bash string replacement)
front=${example%"$var" *}
rear=${example/"$front"/}
#the output
echo "$front"
echo "$rear"
"A quick "
分割が表示されるはずなので(末尾にスペースがある)、質問はあまり適切に提起されていません。出力をどのように与えたいかさえわかりません(配列、2つの別々の変数で...)。決して、私のやり方であなたの質問を言い換えさせてください、そしてこの言い換えられた質問に答えさせてください. 希望どおりでない場合は、元の投稿を変更する方法がわかります。
strings
と regexを指定して、2 つのフィールドを持つ配列を指定var
し、配列の 2 つのフィールドの連結が最小限の (貪欲でない) 一致となるようにします。a
a[0]
a[1]
a
s
a[1] =~ ^var.*
a[1]
まあ、これはすでにbashに存在します:
[[ $s =~ ^(.*)($var.*)$ ]]
a=( "${BASH_REMATCH[@]:1}" )
見て:
$ s="A quick brown fox"
$ var=brown
$ [[ $s =~ ^(.*)($var.*)$ ]]
$ a=( "${BASH_REMATCH[@]:1}" )
$ declare -p a
declare -a a='([0]="A quick " [1]="brown fox")'
$
result=$(echo "${str}" | awk 'gsub("${var}","${var}\n")