1

私はこの文字列を持っていました="dontcarenoone&11111-&1111-&C00 noone"

そして、最初の&から最初の空白までの部分文字列&11111-&1111-&C00を抽出する必要がありました

私はいくつかのインデックスといくつかのsedを試してみましたが運がありませんでした。

誰かが素晴らしいアドバイスを持っていますか?

4

4 に答える 4

6

bash の文字列操作機能を使用できます。

string="dontcare noone &11111-&1111-&C00 noone"

# remove everything up to the first "&"
string="&${string#*&}"

# remove everything from the end to the earliest blank
string="${string%% *}"

# ta da!
echo $string
&11111-&1111-&C00
于 2012-08-02T14:09:38.693 に答える
3
$ echo "dontcare noone &11111-&1111-&C00 noone" | grep -o '&[^ ]*'
&11111-&1111-&C00
于 2012-08-02T14:08:43.137 に答える
0

Bash の正規表現も同様に機能します。

[[ $string =~ (&[[:alnum:]]+-?)+ ]]; echo ${BASH_REMATCH[0]}

正規表現は 1 つ以上のグループに一致します。グループはアンパサンドの後に 1 つ以上の文字/数字とオプションの最後のハイフンが続きます。一致が成功した場合 (つまり、[[ ]] コマンドの存在ステータスが 0 の場合)、配列の最初の要素には、正規表現に一致しBASH_REMATCHたテキストが含まれます。string

于 2012-08-02T14:57:12.450 に答える
-1

grep を使用します。

echo "dontcare noone &11111-&1111-&C00 noone" > somefile.txt

grep somefile.txt -e "&" | cut -d " " > someotherfile.txt

grep は基本的に出力を「cat」してパターンを検索し、 -e でインスタンス化し、 & で文字列をプルします

> は、出力を既に持っているファイルにプッシュするか、単にそこに名前を付けて作成します。

その後、いつでも somefile.txt を上書きしたり、文字列を追加したりできます。

正直なところ、これを行う方法はたくさんあります。grep は、特定の文字列を検索する場合に適したオプションの 1 つですが、そうは言っても、この質問では、grep する方法がたくさんあることがすでにわかります。

パイプ、 | ; and's、 && 、およびその他の多くのオプションを使用すると、 grep を他のコマンドと組み合わせて、探している正確な出力を取得できます。

また、トップコードに追加したばかりの最初の「空白スペース」にそれを入れたいと思っていることもわかります。"cut" と区切り文字 " " を使用すると、スペース以降のデータのみを抽出できます。カットのフィールド設定を使用して、引っ張るものを切り替えることができます。

于 2012-08-02T14:15:33.210 に答える