명령은 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'