파일에서 문자열을 찾아 저장하는 bash 정규식

파일에서 문자열을 찾아 저장하는 bash 정규식

내 파일에 hi.html텍스트 줄이 많이 있습니다. 찾아야 해요

Hello abc123 blah blah blah

그런 다음 위치가 수시로 변경되지만 하드코드되어 항상 "Hello"인 myvariable텍스트를 저장합니다 . 공백은 모든 중요한 텍스트 측면을 구분합니다 .abc123Helloabc123

답변1

첫째, 의무적인 경고이다. 대개아주 나쁜 생각이야정규식과 같은 간단한 도구를 사용하여 HTML을 구문 분석해 보세요. 즉, 이 경우 원하는 내용이 항상 로 시작하는 줄의 두 번째 단어라고 확신하는 경우 Hello다음 중 하나를 사용할 수 있습니다.

  1. 암소 비슷한 일종의 영양grep

    grep -oP '^Hello\s+\K\S+'
    

    grep이는 Perl 호환 정규식(regex -P) 을 사용하여 -o행의 일치하는 부분만 인쇄하도록 지정하여 수행됩니다 . 정규식 자체는 를 찾은 Hello다음 하나 이상의 공백 문자( \s+)를 찾은 다음 이를 삭제하고( \K) 공백이 아닌 문자 1개 이상( )을 찾습니다 \S+.

  2. awk '$1=="Hello"{print $2}' file
    

    awk입력 줄을 공백으로 자동으로 분할합니다. 첫 번째 필드는 $1, 두 번째 필드 $2는 입니다. 따라서 첫 번째 필드가 이면 이 스크립트는 두 번째 필드를 인쇄합니다 Hello. 일치하지 않으므로 주의하세요 Helooo. 첫 번째 행을 모두 원하는 경우수치Hello반드시 첫 번째 단어가 인 것만은 아니며 대신 Hello다음을 사용하십시오.

    awk '/^Hello/{print $2}' file
    

두 방법 모두 출력을 변수에 저장하려면 다음을 사용하십시오.명령 대체:

myvariable=$(grep -oP '^Hello\s+\K\S+')
myvariable=$(awk '/^Hello/{print $2}' file)

답변2

PCRE를 지원 하는 경우 grep다음을 수행할 수 있습니다.

grep -Po '^Hello \K[^ ]+(?= )' hi.html

변수에 저장하려면 다음을 수행하십시오.

myvariable="$(grep -Po '^Hello \K[^ ]+(?= )' hi.html)"

다른 sed방법:

sed -n 's/^Hello \([^ ]\+\) .*/\1/p' hi.html

그것을 저장하려면 myvariable:

myvariable="$(sed -n 's/^Hello \([^ ]\+\) .*/\1/p' hi.html)"

HTML을 구문 분석하기 위해 정규식을 사용하는 것은 아마도 좋은 생각이 아닐 수도 있습니다.

관련 정보