2

私はシェル スクリプトを書いており、次のようなものから FIND ME を削除する必要があります。

* *[**FIND ME**](find me)*

そしてそれを配列に割り当てます。Solaris のスクリプトを非大域ゾーンに移動するまで、コードは問題なく動作していました。以前に使用したコードは次のとおりです。

objectArray[$i]=`echo $line | nawk -F '*[**|**]' '{print $2}'`

今すぐ印刷:

awk: syntax error near line 1  
awk: bailing out near line 1

nawk で同じコマンドを試すように提案されましたが、代わりに次のエラーが表示されます。

nawk: illegal primary in regular expression `* *[**|**]` at  `*[**|**]`
 input record number 1
 source line number 1

また、/usr/xpg4/bin/awk存在しません。

4

2 に答える 2

1

自分が何を得たいのかを明確にする必要があると思います。私にとって、あなたのawk行は「FIND MEを取り除く」ことはありません

echo "* *[**FIND ME**](find me)*" | nawk -F '* *[**|**]' '{print $2}'
[

したがって、期待する入力/出力の例をいくつか挙げていただければ助かります。多分あなたがやりたいことをする方法がありますsedか?

編集:

コメントから、実際に行から「FIND ME」を選択したいのですが、それを取り除くのではありません。

これで受け入れられる正規表現の方言nawkgawk. そのため、その仕事により適したツールが必要なのかもしれません。

echo "* *[**FIND ME**](find me)*" | sed -e"s/.*\* \*\[\*\*\(.[^*]*\)\*\*\].*/\1/"
FIND ME
于 2010-03-05T16:29:04.390 に答える
1

$line変数を次のように引用します: "$line". それでもうまくいかない場合は、nawk を使って別の方法で実行できます。FIND ME のインスタンスを 1 つだけ見つけたいからです。

$ echo "$line" | nawk '{gsub(/.*\*\[\*\*|\*\*\].*/,"");print}'
FIND ME

または、Solaris で bash/ksh を使用している場合は、

$ line="${line#*\[\*\*}"
$ echo "${line%%\*\*\]*}"
FIND ME
于 2010-03-06T00:11:48.157 に答える