다음 줄이 포함된 파일이 있습니다.
handleNewConnection:: User [email protected] has 2 active nodes
handleNewConnection:: User [email protected] has 2 active nodes
handleNewConnection:: User [email protected] has 2 active nodes
handleNewConnection:: User [email protected] has 2 active nodes
시스템은 "@"(선택한 문자)를 찾은 다음 "@" 기호에서 역방향으로 문자열을 추출해야 합니다. 알다시피 숫자나 알파벳 문자를 포함할 수 있으며 길이는 일정하지 않습니다.
그리고 grep -o '[^"]@' /tmp/has2.txt
나는 얻다:
m@
2@
1@
g@
1) 이런 식으로 두 번째 텍스트 파일을 얻을 수 있는지 아는 사람이 있습니까?
langfordm
bas102
bah001
mattleg
2) 1)에서 생성된 이름을 다른 프로세스의 입력으로 단독으로 사용할 수 있는지 아는 사람이 있습니까?
답변1
grep
PCRE()와 함께 사용 -P
:
$ grep -Po '.*\s\K[^@]+(?=@)' file.txt
langfordm
bas102
bah001
mattleg
또는 GNU를 사용하십시오 sed
:
$ sed -r 's/.*\s([^@]+)@.*/\1/' file.txt
langfordm
bas102
bah001
mattleg
분명히 다음 프로세스가 입력을 받는 방법에 따라 다른 프로세스에서 결과를 사용할 수 있습니다. 이에 따라 배열을 만들거나 결과를 다음 프로세스의 STDIN에 직접 전달할 수 있습니다.
답변2
P
erl 호환성 옵션을 사용하는 것은 매우 쉽습니다:
grep -Po '\w+(?=@)' file
이는 \w
모든 단어 문자와 일치하므로 (?=...)
호출됩니다 .시야정규식.
산출:
langfordm
bas102
bah001
mattleg
답변3
여러 가지 방법이 있습니다. 가장 쉬운 방법은 정규식 패턴 일치를 사용하는 것입니다.
grep -io '[a-z0-9_.]*@[a-z0-9_.]*'
이것은 다음을 포함하여 가장 긴 문자열과 일치하고 인쇄됩니다.
- 또는
*
범위에서 대소문자를 구분하지 않는 0개 이상의 문자( )a-z
0-9
_
.
- 정확히 하나
@
- 또는
*
범위에서 대소문자를 구분하지 않는 0개 이상의 문자( )a-z
0-9
_
.
그런 다음 @domain
부품을 분리하십시오
cut -d@ -f1
그래서 완전한 라인은
grep -io '[a-z0-9_.]*@[a-z0-9_.]*' /tmp/file.txt | cut -d@ -f1
대안은 grep
패턴의 사용자 이름 부분을 한 단계로 인쇄할 수 있는 Lookahead PCRE를 사용하는 것입니다. 이는 올바르게 이해하기 어렵지만 위의 예에서는 username@domain
필요 하지 않습니다.cut
grep -Pio '\S+(?=@\S+)'
이것은 의미한다
- 하나 이상의 (
+
) 공백이 아닌 문자 (\S
) 와 일치합니다. - 패턴
@
과 하나 이상의 (+
) 공백이 아닌 문자 (\S
) 가 뒤따릅니다.
답변4
모든 버전에서 sed
기본 정규 표현식을 사용하세요.
sed -e 's/.* \([^@]\+\)@.*/\1/' /tmp/has2.txt
두 번째 질문은 다음과 같습니다.언제나다음과 같은 경우 어떤 방식으로든 입력, 추출 또는 생성된 데이터를 다른 프로세스에 대한 입력으로 사용하십시오.
sed
다른 프로세스에서 사용할 수 있는 형식입니다(또는 ,awk
,perl
및/또는 기타 일반적인 도구를 사용하여 형식으로 변환할 수 있음).다른 프로세스는 표준 입력이나 하나 이상의 파일에서 입력을 받을 수 있습니다. 즉, 특정 위치에 있는 하나의 특정 파일에서만 입력을 받도록 하드코딩되지 않았습니다. 그런 경우에도 해당 특정 파일을 생성/덮어쓰는 경우 여기에는 귀하의 데이터가 포함되어 있으며 계속 작동할 것입니다.
이것이 Unix와 가젯 접근 방식의 장점입니다. 이는 데이터 중심 방식(사용자 정의 도구 포함)을 선택하여 원하는 도구를 사용하여 원하는 작업을 수행할 수 있는 데이터 중심 방식으로 생각하도록 권장합니다. 애플리케이션 중심 접근 방식(데이터가 마법의 블랙박스 애플리케이션에 속하고 해당 특정 애플리케이션을 통해서만 데이터를 조작하거나 상호 작용할 수 있음).
마찬가지로 중요한 것은 애플리케이션 개발자를 포함한 개발자가 유사한 데이터 중심 방식으로 생각하도록 장려한다는 것입니다. 앱 개발자가 앱에서 사용자 데이터를 잠가서 요구 사항을 방해하려고 하면 사용자는 이를 버그이자 권리 침해로 간주합니다.