ファイルの行にある指定された単語のいずれかを見つけるためにawkで使用する正規表現があります。これは、awk "/word1/||/word2/||/word3/" filename
のように見えます。あるいは、WORDS="word1 word2 word3"
のような単語を指定してから、bash文字列置換を使用して正規表現をawkに渡すようにしています。文字列の代替を使用して正規表現が機能しないのはなぜですか?
私はこれを無駄にするさまざまな方法を試しました。 awkは単にファイル全体の内容をダンプするか、正規表現形式について何らかの苦情を吐き出します。ここで
は、私が持っているものです。
#!/bin/bash
FILE="myfile"
WORDS="word1 word2 word3"
# use BASH string substitution to obtain the regex which should look like this:
# "/word1/||/word2/||/word3/"
REGEX=\"/${WORDS// //||/}/\"
awk ${REGEX} $FILE
私はそれが引用に関係しているかなり確信していると私は、エコーを使用して様々な方法を試してみましたが、バックダニやエコーとき、それは(右を見て得ることができました)実際にそれを使用しようとすると失敗します。
これはawkと奇妙な正規表現の組み合わせの両方の奇妙な使い方です。あなたは '/ a | b | c /'を取得しようとしているはずです(拡張grepを使って) – Mat
私はこれをcygwinで試しました:regexの特殊文字の前に "\"記号を付けてみてください。このコマンドは私のために働きます: 'awk/\(def \ | abc \)/ abc.txt' - " def "または" abc "を含むすべての行を見つけます。 – user1227804
@Mat。ありがとう。検索結果が私をawkに導きます。 –