한 파일에서 다른 파일의 행 앞에 오는 모든 행을 찾습니다.

한 파일에서 다른 파일의 행 앞에 오는 모든 행을 찾습니다.

한 파일에서 다른 파일의 임의 행에 대한 접두어인 모든 행을 찾는 방법이 있습니까?

grep단일 패턴이 어떤 줄 앞에 붙는지 확인하려면 I를 사용하세요 . 예를 들어 file1다음 과 같은 경우

1
2
3

그리고 file2

100
10
25
55

grep '^1' file2나에게 줄 것이다

100
10

file1행을 반복하여 이것이 행의 접두사인지 확인하는 방법이 있습니까 file2? 이 경우 file1출력에서 ​​접두사를 확인하면 다음과 같습니다.file2

100
10
25

답변1

file1올바른 정규식 목록으로 바꾸십시오 .

sed 's/^/^/' file1 >patterns

이것은 ^각 줄의 첫 번째 문자로 a를 삽입합니다.

그런 다음 grep다른 파일과 함께 사용하십시오.

grep -f patterns file2

시험:

$ sed 's/^/^/' file1 >patterns
$ cat patterns
^1
^2
^3
$ grep -f patterns file2
100
10
25

임시 스키마 파일 없음:

프로세스 대체를 이해하는 쉘을 사용하십시오.

grep -f <( sed 's/^/^/' file1 ) file2

프로세스 대체가 없는 쉘에서:

sed 's/^/^/' file1 | grep -f /dev/stdin file2

쉘의 프로세스 리디렉션 기능을 사용하십시오 yash(동일한 사용)통사론위의 절차적 대체와 동일하지만 의미가 다릅니다):

grep -f /dev/stdin file2 <( sed 's/^/^/' file1 )

관련 정보