참조 번호가 지정된 파일에서 URL을 파악하는 방법은 무엇입니까?

참조 번호가 지정된 파일에서 URL을 파악하는 방법은 무엇입니까?

다음과 같은 텍스트 파일이 있다고 가정해 보겠습니다. 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\.. 캐럿은 줄의 시작 부분에서 일치하도록 강제하고 백슬래시는 도트가 "모든 문자"가 아닌 문자 그대로의 점에만 일치하도록 만듭니다. 이는 이스케이프되지 않은 점의 특별한 의미입니다. 이것이 없으면 패턴은 1URL의 일부 또는 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..

관련 정보