grep|sed|awk를 사용하여 표준 입력에서 정규식을 테스트합니다.

grep|sed|awk를 사용하여 표준 입력에서 정규식을 테스트합니다.

때로는 정규식이 올바른지 테스트하고 싶을 때가 있습니다.

regex표준 입력에서 역방향 일치를 수행하는 방법은 무엇입니까 ?

Fe I는 문자열을 제공된 정규 표현식과 일치시킬 수 있습니다. 예를 들면 다음과 같습니다.

grep "\(foo\)-bar"
foo
bar
foo-bar
foo-bar #Match found

내가 하고 싶은 일은 그 반대입니다. 다음과 같습니다.

$ grep "This is one string"
\(This\) #Will send "This" to stdout
This?.*  #Will send full match

너무 많은 스크립팅 없이 이것이 가능합니까?

답변1

셸에서 다음 함수를 정의합니다(직접 입력하거나 셸에 넣을 수 있음 ~/.bashrc).

testregex() {
  [ "$#" -eq 1 ] || return 1
  while IFS= read -r line; do
    printf '%s\n' "$1" | grep -Eoe "$line"
  done
}

그런 다음 다음과 같이 정규식을 테스트할 수 있습니다.

$ testregex 'This is a line'
This            <--input
This            <--output
This?.*         <--input
This is a line  <--output
slkdjflksdj     <--input with no output (no match)
s.*             <--input
s is a line     <--output
$               <--I pressed Ctrl-D to end the test

답변2

-일치하는 "핀"을 검색하기 위해 표준 입력을 "건초 더미"로 사용하는 "파일"을 사용하여 검색 할 수 있습니다 .

$ grep -oE '[aeiou]+' -
This is a test  < input
i               > output
i               > output
a               > output
e               > output
whaaaat?        < input
aaaa            > output

Ctrl-를 사용하여 스트림을 D보내고 종료합니다.EOF

-f그러나 파일에서 패턴 목록을 읽는 스위치와 함께 표준 입력을 사용하여 동일한 작업을 수행 할 수 있다고 생각하지 않습니다 . 그러나 말뭉치에 텍스트 패턴이 많으면 다음을 수행할 수 있습니다.

grep -f needle-patterns haystack.txt

그중에는 needle-patterns한 줄에 하나의 정규 표현식이 포함된 일반 텍스트 파일이 있습니다.

관련 정보