私はこの文字列を持っていました="dontcarenoone&11111-&1111-&C00 noone"
そして、最初の&から最初の空白までの部分文字列&11111-&1111-&C00を抽出する必要がありました
私はいくつかのインデックスといくつかのsedを試してみましたが運がありませんでした。
誰かが素晴らしいアドバイスを持っていますか?
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
$ echo "dontcare noone &11111-&1111-&C00 noone" | grep -o '&[^ ]*'
&11111-&1111-&C00
Bash の正規表現も同様に機能します。
[[ $string =~ (&[[:alnum:]]+-?)+ ]]; echo ${BASH_REMATCH[0]}
正規表現は 1 つ以上のグループに一致します。グループはアンパサンドの後に 1 つ以上の文字/数字とオプションの最後のハイフンが続きます。一致が成功した場合 (つまり、[[ ]] コマンドの存在ステータスが 0 の場合)、配列の最初の要素には、正規表現に一致しBASH_REMATCH
たテキストが含まれます。string
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" と区切り文字 " " を使用すると、スペース以降のデータのみを抽出できます。カットのフィールド設定を使用して、引っ張るものを切り替えることができます。