한 파일에서 다른 파일의 임의 행에 대한 접두어인 모든 행을 찾는 방법이 있습니까?
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 )