題名のとおり、expectを用いた正規表現のgrepをしたいのですが、
以下のように記述し、入力し、実行すると
expect -c "
spawn ssh ~~~
expect \"password:\"
send \"hogehoge\n\"
expect \">\"
send \"zgrep "探したいもの" /なんかのログ.log.gz | grep -v "[0-9]%"\n\"
expect \">\"
send \"exit\n\"
"
以下のようにエラーが出てしまいます。
invalid command name "1-9"
while executing
"1-9"
invoked from within
[0-9]この部分を\[0-9\]このようにエスケープしてみても同じエラーが出てしまい、実行できません。
どのようにすれば正規表現として認識してくれるのでしょうか。
以上よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
> "探したいもの" → \\\"探したいもの\\\"
> 上記の部分に関しましては、
> 最初にzgrepの部分でエスケープしているためか、エスケープせずとも問題ないようです。
ちょっと思い違いをしているようですが
まず、この expect -c " の"以降を解釈するのは、これを実行するシェルです。
このままだと
> send \"zgrep "
の後の"が、-c "の"に対応するクオートです文字列です。
「探したいもの」はクオート無しです。
\でエスケープした"は、他の文字と同じになり、それ自体にクオートする機能はありません。
「"send \"zgrep "探したいもの" /なんかのログ.log.gz | grep -v "[0-9]%"\n\""」
は、例えば
「"send Qzgrep "探したいもの" /なんかのログ.log.gz | grep -v "[0-9]%"\nQ"」
と書いたのと、文法的な解釈は同じなのです。
> send \"zgrep "探したいもの" /なんかのログ.log.gz | grep -v "[0-9]%"\n\"
は、
クオートを展開した文字列「 ... send "zgrep 」
直に書かれた文字列「探したいもの」
クオートを展開した文字列「 /なんかのログ.log.gz | grep -v 」
直に書かれた文字列「[0-9]%」
クオートを展開した文字列「\n" ... send "exit\n"」
となります。
直に書かれた文字列では、
・空白があったら、単語の区切りとなって、別の引数になる
・特殊な文字はファイル名展開対象とかで使われてしまう
ということになります。
この例では「探したいもの」と空白無しですが、実際はここに空白が入ったりしてませんか?
そして、そこで-cの引数としては切れてしまったりしていませんか?
あと、 \nじゃなくて\\nだと思います。
expect -c を echo にして、表示されるのが、期待通りのexpectスクリプトになっているかも確認してみてください。
こういうのは、
・変数展開とか必要が無いところはシングルクオートを使う
・ヒアドキュメントを使う
・別のファイルにする
のが間違いが少ないです。
No.1
- 回答日時:
ダブルクォーテーションを二重にエスケープしないといけないのでは?
"探したいもの" → \\\"探したいもの\\\"
"[0-9]%" → \\\"[0-9]%\\\"
この回答への補足
回答ありがとうございます。
"探したいもの" → \\\"探したいもの\\\"
上記の部分に関しましては、
最初にzgrepの部分でエスケープしているためか、エスケープせずとも問題ないようです。
また、[0-9]の部分に関しましては二重でエスケープしてみましたが、同じエラーとなってしまいました。
send \"zgrep "探したいもの" /なんかのログ.log.gz | grep -v "[0-9]%"\n\"
以上よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 英語の不定詞についてです。want to 、expect toなどの熟語の不定詞toは副詞の何用法で 2 2022/08/08 18:58
- その他(プログラミング・Web制作) bashのgrepで複数の検索、かつスクリプト内で改行する方法を教えてください。 1 2022/10/06 20:09
- 戦争・テロ・デモ ウクライナ、メル友に五千円要求されてさ 1 2022/04/02 09:38
- 英語 the patient recovered more quickly than ( ) 1 expe 6 2022/11/25 17:21
- フリーソフト サクラエディタの正規表現(grep機能)の使い方 3 2022/06/22 10:29
- 英語 The coronavirus is changing the face of education. 2 2022/04/17 21:32
- その他(メールソフト・メールサービス) 【大至急】メールが送付できているか分かりません 1 2023/08/26 08:05
- UNIX・Linux Debianでシェルスクリプトにおいて正規表現の条件文で[[,]]が使えないので困ってます 2 2023/01/20 09:27
- UNIX・Linux Linuxのbash環境下です。 1 2022/11/27 12:31
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
expectでコマンド実行結果を変数に代入出来ない
UNIX・Linux
-
スクリプトのエラー「unexpected EOF while looking for matching `'」の解決法は?"
UNIX・Linux
-
expectの使い方について
UNIX・Linux
-
-
4
expectを使って自動でSSHログインした後にコマンドを実行したいと
UNIX・Linux
-
5
シェルスクリプト中のexpectで変数使う方法
UNIX・Linux
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
squidのアクセスログについて
-
Solarisでのログ情報ファイル
-
この大量のmaillogの原因を知り...
-
FTPのログを取得したい
-
IEのイベントログをイベントビ...
-
auth.logが出力されない。
-
WINDOWS NT システムログファイ...
-
ssl_request_logの必要性について
-
logrotateの挙動について
-
tailとgrepの組み合わせて、結...
-
syslogからログが出力されなく...
-
どのシステムがどういったsyslo...
-
suコマンドのログ
-
rsyncの実行時間
-
squid 起動できません
-
Clam Antivirusの設定について
-
Apache/2.0.54 (Debian GNU/Lin...
-
reboot 実行時のログについて
-
/etc/cron.daily/logrotateがエ...
-
FedoraCore6を使用し、PostFix...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ssl_request_logの必要性について
-
squidのアクセスログについて
-
IEのイベントログをイベントビ...
-
expectを用いた正規表現[]のgre...
-
auth.logが出力されない。
-
vsftpを設定し試したら書き込み...
-
rsyncの実行時間
-
evalが使えない場合
-
対数の問題お願いします
-
suコマンドのログ
-
logrotateの再起動
-
FedoraCore6を使用し、PostFix...
-
イベントログ 「シェルが停止し...
-
/etc/cron.daily/logrotateがエ...
-
/var/adm/messagesから当日分の...
-
コマンドプロンプトでのcopyコ...
-
tailとgrepの組み合わせて、結...
-
bindにてlogがfailedになる
-
ssl_error_logについて
-
" /var/log/messages "の中は何...
おすすめ情報