ディレクトリ名を含むファイルがあります。
my_list.txt
:
/tmp
/var/tmp
その名前がすでにファイルに存在する場合は、追加する前にBashをチェックインしたいです。
grep -Fxq "$FILENAME" my_list.txt
名前が見つかった場合は終了ステータスは0(true)、見つからなかった場合は1(false)です。
if grep -Fxq "$FILENAME" my_list.txt
then
# code if found
else
# code if not found
fi
これは の関連セクションですgrep
- /のマニュアルページ:
grep [options] PATTERN [FILE...]
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by new-
lines, any of which is to be matched.
-x, --line-regexp
Select only those matches that exactly match the whole line.
-q, --quiet, --silent
Quiet; do not write anything to standard output. Exit immedi-
ately with zero status if any match is found, even if an error
was detected. Also see the -s or --no-messages option.
次の解決策について
grep -Fxq "$FILENAME" my_list.txt
-Fxq
が平易な英語で何を意味するのか(私がやったように)疑問に思っているなら:
F
:PATTERNの解釈方法に影響します(正規表現の代わりに固定文字列)x
:行全体に一致q
:Shhhhh ...最小限の印刷Manファイルから:
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched.
(-F is specified by POSIX.)
-x, --line-regexp
Select only those matches that exactly match the whole line. (-x is specified by POSIX.)
-q, --quiet, --silent
Quiet; do not write anything to standard output. Exit immediately with zero status if any match is
found, even if an error was detected. Also see the -s or --no-messages option. (-q is specified by
POSIX.)
私の頭の中で3つの方法:
1)パス内の名前のショートテスト(これがあなたのケースかもしれないとは思いません)
ls -a "path" | grep "name"
2)ファイル内の文字列のショートテスト
grep -R "string" "filepath"
3)regexを使った長いbashスクリプト
#!/bin/bash
declare file="content.txt"
declare regex="\s+string\s+"
declare file_content=$( cat "${file}" )
if [[ " $file_content " =~ $regex ]] # please note the space before and after the file content
then
echo "found"
else
echo "not found"
fi
exit
これは より速い あなたが - を持っているなら ファイル上の複数の文字列をテストするために ループを使用して/例えば任意のcicleで正規表現を変更することを使用します.
もっと簡単な方法:
if grep "$filename" my_list.txt > /dev/null
then
... found
else
... not found
fi
ヒント:コマンドの終了ステータスが欲しいが出力はしたくない場合は/dev/null
に送ってください。
最も簡単で簡単な方法は次のとおりです。
isInFile=$(cat file.txt | grep -c "string")
if [ $isInFile -eq 0 ]; then
#string not contained in file
else
#string is in file at least once
fi
grep -cは、ファイル内で文字列が何回出現したかのカウントを返します。
私があなたの質問を正しく理解したならば、これはあなたが必要とすることをするべきです。
一行で :check="/tmp/newdirectory"; [[ -n $(grep "^$check\$" my_list.txt) ]] && echo "dir already listed" || echo "$check" >> my_list.txt
Fgrepを使った私のバージョン
FOUND=`fgrep -c "FOUND" $VALIDATION_FILE`
if [ $FOUND -eq 0 ]; then
echo "Not able to find"
else
echo "able to find"
fi
grep -E "(string)" /path/to/file || echo "no match found"
-Eオプションはgrepに正規表現を使わせる
1行の存在だけを確認したい場合は、ファイルを作成する必要はありません。例えば。、
if grep -xq "LINE_TO_BE_MATCHED" FILE_TO_LOOK_IN ; then
# code for if it exists
else
# code for if it does not exist
fi
Grep-lessソリューションは、私のために働きます:
MY_LIST=$( cat /path/to/my_list.txt )
if [[ "${MY_LIST}" == *"${NEW_DIRECTORY_NAME}"* ]]; then
echo "It's there!"
else
echo "its not there"
fi
grep -Fxq "String to be found" | ls -a