0

2013 年 2 月 3 日の形式で日付を awk スクリプトに渡しています。この日付に一致するすべてのレコードを取得する必要があります。スクリプトを使用せずに直接実行する場合は、スラッシュをエスケープする必要があります。

awk '$4 ~ /02\/03\/2013/ {print $1}' 

ただし、コマンドライン引数として送信される場合はエスケープする必要はありません。2013 年 2 月 3 日を使用してスクリプトを実行し、それに対応するように awk コマンドを変更しました。

コマンドライン引数として文字列を送信するときに、文字のエスケープはどのように機能するのか、誰か説明してもらえますか? 有害な入力に対する注意事項は何ですか?

これに関連するオンライン リソースをお寄せいただければ幸いです。

4

2 に答える 2

4

スラッシュは、正規表現の特殊文字ではありません。エスケープする必要がある理由は、正規表現定数がスラッシュ自体を境界として使用するためです。正規表現として解釈される文字列を使用すると、これらは使用されないため、スラッシュをエスケープする必要はありません..

awk '$4~dd{print $1}' dd=02/03/2013

正規表現一致の代わりに、おそらく完全一致を使用できます

awk '$4==dd{print $1}' dd=02/03/2013
于 2013-02-15T10:32:26.793 に答える
1

bash でパラメータ展開を使用できます。

date=02/03/2013
date=${date//\//\\/}            # Backslash all slashes.
awk "\$4 ~ /$date/ {print \$1}" # Prevent bash from expanding $1.
于 2013-02-15T10:08:26.157 に答える