
題名のとおり、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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
システムイベントのMARKとは何...
-
syslogについて…
-
Solarisでのログ情報ファイル
-
ssl_request_logの必要性について
-
イベントビューアからの特定のe...
-
suコマンドのログ
-
loggerでmessagesに書き出す方法
-
この大量のmaillogの原因を知り...
-
Linux の時刻が勝手に変わる
-
イベントログ 「シェルが停止し...
-
squidのアクセスログについて
-
公開鍵方式のsshでパスワード入...
-
循環参照にならない方法があっ...
-
リモートデスクトップ接続でパ...
-
mailコマンドについて
-
「DNSサーバーを自動的に取得す...
-
IIS SMTPメールの容量
-
MACアドレス 00:E0:C3 SAKAI って
-
vsftpd でのユーザーに対するパ...
-
VNCへのアクセス制限
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IEのイベントログをイベントビ...
-
ssl_request_logの必要性について
-
tailとgrepの組み合わせて、結...
-
WINDOWS NT システムログファイ...
-
logrotateの再起動
-
イベントログ 「シェルが停止し...
-
auth.logが出力されない。
-
Linux の時刻が勝手に変わる
-
reboot 実行時のログについて
-
evalが使えない場合
-
この大量のmaillogの原因を知り...
-
Aixのsyslogログローテーション...
-
squidのアクセスログについて
-
vsftpを設定し試したら書き込み...
-
rsyncの実行時間
-
apacheでjpgが表示されない。
-
/var/adm/messagesから当日分の...
-
/etc/cron.daily/logrotateがエ...
-
サブシステムがロックします。
-
squidのフリーズ?についてです!
おすすめ情報