2

以下の条件でbashシェルスクリプト内の文字列を分割したいと考えています。

1) 区切り文字は変数です

2) 区切り文字は複数文字です

例:

A quick brown fox
var=brown

A quick文字列をandに分割したいのですbrown foxが、変数varを区切り文字として使用し、そうではありませんbrown

4

5 に答える 5

8
#!/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}"
于 2014-03-17T15:09:47.090 に答える
1

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"
于 2013-11-11T19:04:17.400 に答える
0

"A quick "分割が表示されるはずなので(末尾にスペースがある)、質問はあまり適切に提起されていません。出力をどのように与えたいかさえわかりません(配列、2つの別々の変数で...)。決して、私のやり方であなたの質問を言い換えさせてください、そしてこの言い換えられた質問に答えさせてください. 希望どおりでない場合は、元の投稿を変更する方法がわかります。

stringsと regexを指定して、2 つのフィールドを持つ配列を指定varし、配列の 2 つのフィールドの連結が最小限の (貪欲でない) 一致となるようにします。aa[0]a[1]asa[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")'
$
于 2013-11-10T18:33:23.517 に答える
0
result=$(echo "${str}" | awk 'gsub("${var}","${var}\n")
于 2013-11-10T04:50:13.847 に答える