텍스트 파일의 줄에서 하나의 요소 추출

텍스트 파일의 줄에서 하나의 요소 추출

명령은 grep행에 표현식과 일치하는 문자열이 포함된 경우 해당 행을 인쇄합니다. 이는 지정된 내용을 검색하는 데 편리하지 않습니다.

예를 들어, 서식이 지정된 어휘 파일이 있습니다.

**word**
1. Definition:
2. Usage
3. Others

파일 내에서 단어 목록을 만들기 위해 모든 단어를 검색하고 싶습니다.

grep '\*\*[^*]*\*\*'

대부분의 콘텐츠를 반환합니다.

grep만 잡는 데 사용하는 방법은 무엇입니까 word?

답변1

단어에 대해서는 이렇게 사용합니다.정규식 ( -P) :

grep -oP '^\s*\*\*\K[^*]+(?=\*\*)' file

출력 :

word

단어는 다음과 같습니다.

grep -oP '^\s*\d+\.\s*\K\w+' file

출력 :

Definition
Usage
Others

답변2

단어를 추출하는 데 사용할 수 있는 여러 도구가 있습니다. 다음은 sed에 구현된 버전입니다.

 sed '/^\*\*/!d' <your_file

이 명령은 파일에서 다음으로 시작하는 모든 줄을 일치시켜 **인쇄합니다. 다른 줄은 출력에서 ​​삭제됩니다. 별표도 제거하려면 명령을 다음과 같이 확장할 수 있습니다.

sed '/^\*\*/!d;s/\*//g' <your_file

또한 이 명령은 *인쇄되기 전에 줄에서 모든 문자를 제거합니다.

답변3

방법 awk:

awk -F'*\\*' 'NF>2{print $2}' infile

샘플 테스트 입력:

*wrd*
*woooord
**WRD
WORD**
woooooooooood*
**word**

출력:

word

답변4

추가 도구를 사용해도 괜찮다면 매우 간단한 해결책은 출력을 사후 필터링하여 grep해당 tr문자를 모두 삭제하는 것 입니다 *.

grep -x '\*\*[^*]*\*\*' | tr -d '*'

또한 위와 같이 GNU grep 플래그를 사용하여 -x전체 줄만 일치시켜 실수로 **word**같은 줄의 다른 텍스트에 둘러싸여 나타나는 것을 방지하는 것이 좋습니다. 이제 초기에 많은 잠재적 일치 항목을 삭제할 수 있으므로 패턴 일치 프로세스의 속도도 빨라질 수 있습니다.

sed대안

sed의 p플래그를 활용하여 단일 명령으로 일치, 교체 및 인쇄할 수도 있습니다.

sed -nre 's/^\*\*([^*]*)\*\*$/\1/p'

관련 정보