다음과 같은 텍스트 파일이 있다고 가정해 보겠습니다. Call it hello
1. https://www.google.ca/
2. https://www.bob.ca/
3. https://www.cat.ca/
참조 번호가 주어지면 링크를 어떻게 찾을 수 있나요?
$ grep hello '1.' # (what should be here to just get the link?)
예를 들어 다음을 출력하고 싶습니다.https://www.google.ca/오직
답변1
grep 명령을 사용하십시오.
grep --perl-regexp --only-matching '(?<=^1\. ).*' hello
몇 가지 설명:
- --perl-regexp Perl 스타일 정규 표현식 활성화
- --only-matching 일치하는 부분만 표시
- (?<=^1\.)은 앞의 줄이 '1.'로 시작한다는 의미입니다. ' ('^' = '줄 시작' 제한)
제안대로사용자 1404316, 상수 '1'은 변수로 대체될 수 있습니다.
IDX=1
grep --perl-regexp --only-matching "(?<=^${IDX}\. ).*" hello
답변2
패턴(번호)에 sed를 사용하여 줄을 선택하고 원하는 부분만 유지하세요: URL
-bash-4.4$ cat > toto
1. https://www.google.ca/
2. https://www.bob.ca/
3. https://www.cat.ca/
-bash-4.4$ sed '/2/ !d ; s/.*\ //' toto
https://www.bob.ca/
-bash-4.4$
답변3
법선 grep
자체는 일치하는 선을 제공합니다. 쓸모없는 부분을 제거하는 것은 또 다른 단계입니다.
첫째, 좀 더 비슷한 패턴을 원할 수도 있습니다 ^1\.
. 캐럿은 줄의 시작 부분에서 일치하도록 강제하고 백슬래시는 도트가 "모든 문자"가 아닌 문자 그대로의 점에만 일치하도록 만듭니다. 이는 이스케이프되지 않은 점의 특별한 의미입니다. 이것이 없으면 패턴은 1
URL의 일부 또는 12
줄 시작 부분의 숫자 등과 일치합니다.
그런 다음 줄 시작 부분의 숫자를 제거해야 합니다. sed
여기에 매우 유용합니다. sed
줄 시작 부분의 숫자와 마침표 및 공백을 제거합니다. 그래서 우리는 다음과 같이 쓸 수 있습니다:
$ grep -e '^1\.' urls | sed 's/^[0-9]*\. //'
그러나 sed
교체 명령을 조건으로 사용할 수도 있습니다. 이는 주어진 숫자를 null로 바꾸고 교체가 완료된 후 결과 줄을 인쇄하려고 시도합니다.
$ sed -ne 's/^1\. //p' urls
( -n
기본 동작인 모든 줄을 인쇄하지 않음을 의미합니다.)
답변4
awk를 사용하는 것이 더 쉽습니다.
$ awk '"2."==$1{print $2}' hello
https://www.bob.ca/
다른 행을 선택하는 대신 원하는 번호를 사용하세요 2.
.