노트:

노트:

File.createTempFile키워드와 줄 번호가 포함된 모든 Java 파일을 찾고 싶습니다 . 이것이 내가 한 일입니다:

$ find . -name "*.java" | xargs grep -n "File.createTempFile"
./nuxeo-studio-test/src/test/java/com/nuxeo/studio/web/StudioServletTest.java:162:            File tmpFile = File.createTempFile(jarEntryName, null, Environment.getDefault().getTemp());
./nuxeo-studio-ui/src/main/java/com/nuxeo/studio/core/builders/WorkflowFeatureBuilder.java:421:            tmp = File.createTempFile(".workflow-to-zip", ".tmp", workspace.getRoot());
./nuxeo-studio-ui/src/test/java/com/nuxeo/studio/core/backup/TestS3Backup.java:101:        File tempFile = File.createTempFile(RandomStringUtils.randomAlphabetic(5), ".tmp");
./nuxeo-studio-ui/target/classes/com/nuxeo/studio/core/builders/WorkflowFeatureBuilder.java:421:            tmp = File.createTempFile(".workflow-to-zip", ".tmp", workspace.getRoot());
./nuxeo-studio-web/src/main/java/com/nuxeo/studio/web/v1/ProjectResource.java:191:            File zip = File.createTempFile(filename + "-", ".zip", tempRepo);

그러나 나는 이 결과가 너무 길어서 읽을 수 없다는 것을 알았습니다. 파일 경로와 줄 번호만 유지하고 싶습니다. 예상되는 결과는 다음과 같습니다.

./nuxeo-studio-test/src/test/java/com/nuxeo/studio/web/StudioServletTest.java:162
./nuxeo-studio-ui/src/main/java/com/nuxeo/studio/core/builders/WorkflowFeatureBuilder.java:421
./nuxeo-studio-ui/src/test/java/com/nuxeo/studio/core/backup/TestS3Backup.java:101
./nuxeo-studio-ui/target/classes/com/nuxeo/studio/core/builders/WorkflowFeatureBuilder.java:421
./nuxeo-studio-web/src/main/java/com/nuxeo/studio/web/v1/ProjectResource.java:191

누군가 나에게 이 작업을 수행하는 방법을 가르쳐 줄 수 있습니까?

답변1

이를 통해 pcregrep다음을 수행할 수 있습니다.

pcregrep --include='\.java$' -rHno1 '()File\.createTempFile' .

출력은 다음과 같습니다.

./path/to/file.java:12:

패턴이 한 줄에 여러 번 발생하면 동일한 수의 줄이 출력됩니다. 이를 원하지 않으면 다음과 같이 변경할 수 있습니다.

pcregrep --include='\.java$' -rHno1 '^().*?File\.createTempFile' .

답변2

한 가지 방법은 다음과 같습니다 awk.

find . -name '*.java' -exec awk '/PATTERN/{print FILENAME,FNR}' {} +

또는 시뮬레이션된 출력을 원하는 경우 grep:

find . -name '*.java' -exec awk '/PATTERN/{printf("%s:%s\n", FILENAME, FNR)}' {} +

답변3

keyW='File.createTempFile'
find . -type f -name '*.java' -exec perl -slne '
  print "$ARGV:$." if /\Q$k\E/; $. = 0 if eof;
' -- -k="$keyW" -- {} +

답변4

esport keyW='File.createTempFile'
find . -name '*.java' -type f -exec sh -c '
   grep -hn "$keyW" "$1" | cut -d":" -f1 |
   while IFS=: read -r n x; do
      printf "%s:%s\n" "$1" "$n"
   done
' {} {} \;

노트:

grep각 파일을 하나씩 실행해야 하는 것은 이 방법의 제한 사항입니다.

관련 정보