find를 사용하여 파일 내 검색을 강하게 시도했습니다.
find
명령을 사용하고 있습니다.find
는 파일 "이름"의 검색에 자주 사용됩니다만, find
의 실행 결과를 파이프로 xargs grep
에 건네주는 것으로 파일의 내용을 검색할 수도 있습니다.다음의 명령을 치면(자), 커런트 디렉토리 이하에 존재하는 .cc 파일중에서,
hoge
라는 워드가 포함되는 행이 출력됩니다.find . -name "*.cc" | xargs grep "hoge" -n
이 명령을 응용하여 다음과 같은 alias를 만들어 보았습니다.
.bash_aliases
function ff_orig(){
# 正規表現による条件指定で、拡張子が.ccまたは.hであるファイルについて検索
find . -type f -regextype posix-egrep -regex ".*\.(cc|h)" | xargs grep "$1" -n | nl | grep $1
}
function ff(){
# 第一引数:検索ワード
# 第二引数:エディタ(=vim)で開きたいファイルのindex
if [ $# -eq 1 ]; then
ff_orig $1
elif [ $# -eq 2 ]; then
vim `ff_orig $1 | sed -n $2p | cut -f 2 | cut -d: -f 1`
else
echo "error"
fi
}
예를 들어,
ownerName
라는 변수가 어디에서 사용되고 있는지 찾고 싶었을 때,위의 alias를 사용하면 현재 디렉토리 아래에서
ownerName
가 사용되는 .cc, .h 파일 및 해당 행이 출력됩니다.$ ff ownerName
1 ./qtenv/inspectorutil.cc:218: const char *ownerName = owner->getFullName();
2 ./qtenv/inspectorutil.cc:222: label = ownerName + QString(".") + name + " --> " + nextGateOwnerName + "." + nextGateName;
3 ./envir/sectionbasedconfig.cc:889: std::string ownerName;
4 ./envir/sectionbasedconfig.cc:891: splitKey(key.c_str(), ownerName, suffix);
5 ./envir/sectionbasedconfig.cc:895: if (!ownerName.empty())
6 ./envir/sectionbasedconfig.cc:896: entry2.ownerPattern = new PatternMatcher(ownerName.c_str(), true, true, true);
7 ./envir/sectionbasedconfig.cc:1176: std::string ownerName;
8 ./envir/sectionbasedconfig.cc:1178: splitKey(key, ownerName, suffix);
실제로 아래 이미지와 같이 검색 단어에 색상이 표시됩니다.
또한,
$ ff ownerName 3
그리고 치면
sectionbasedconfig.cc
를 vim에서 열 수 있습니다.필자는 하루 100회는 사용하고 있습니다.
Reference
이 문제에 관하여(find를 사용하여 파일 내 검색을 강하게 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/naotoh0811/items/be96b1c0be08f049ba91텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)