경기 전후의 Grep 문자?
사용 방법:
grep -A1 -B1 "test_pattern" file
파일에서 일치하는 패턴 앞과 뒤에 한 줄을 생성합니다.선이 아니라 지정된 수의 문자를 표시하는 방법이 있습니까?
제 파일에 있는 선들이 꽤 커서 전체 선을 인쇄하는 것에 관심이 없고 문맥상으로만 일치하는 것을 관찰합니다.이것을 어떻게 할 것인지에 대한 제안이 있습니까?
앞의 3자와 뒤의 4자
$> echo "some123_string_and_another" | grep -o -P '.{0,3}string.{0,4}'
23_string_and
grep -E -o ".{0,5}test_pattern.{0,5}" test.txt
패턴 앞뒤로 최대 5자까지 일치합니다.-o 스위치는 일치만 표시하도록 grep에 지시하고 -E는 확장 정규식을 사용하도록 지시합니다.식 주위에 따옴표를 붙여야 합니다. 그렇지 않으면 셸에 의해 해석될 수 있습니다.
사용할 수 있습니다.
awk '/test_pattern/ {
match($0, /test_pattern/); print substr($0, RSTART - 10, RLENGTH + 20);
}' file
그러니까, 다음과 같이 말입니다.
grep -o '.\{0,20\}test_pattern.\{0,20\}' file
?
양쪽에 최대 20자까지 인쇄할 수 있습니다.test_pattern
.\{0,20\}
표기법은 다음과 같습니다.*
그러나 0 또는 그 이상의 반복 대신 0 ~ 20회 반복을 지정합니다. 그-o
전체 라인이 아니라 일치하는 부분만 보여달라고 합니다.
나는 이 암호화된 명령 수식어들을 결코 쉽게 기억하지 못할 것이다 그래서 나는 최고의 답을 가지고 그것을 내 안의 함수로 만들었습니다.~/.bashrc
파일 이름:
cgrep() {
# For files that are arrays 10's of thousands of characters print.
# Use cpgrep to print 30 characters before and after search pattern.
if [ $# -eq 2 ] ; then
# Format was 'cgrep "search string" /path/to/filename'
grep -o -P ".{0,30}$1.{0,30}" "$2"
else
# Format was 'cat /path/to/filename | cgrep "search string"
grep -o -P ".{0,30}$1.{0,30}"
fi
} # cgrep()
다음은 실제 상황입니다.
$ ll /tmp/rick/scp.Mf7UdS/Mf7UdS.Source
-rw-r--r-- 1 rick rick 25780 Jul 3 19:05 /tmp/rick/scp.Mf7UdS/Mf7UdS.Source
$ cat /tmp/rick/scp.Mf7UdS/Mf7UdS.Source | cgrep "Link to iconic"
1:43:30.3540244000 /mnt/e/bin/Link to iconic S -rwxrwxrwx 777 rick 1000 ri
$ cgrep "Link to iconic" /tmp/rick/scp.Mf7UdS/Mf7UdS.Source
1:43:30.3540244000 /mnt/e/bin/Link to iconic S -rwxrwxrwx 777 rick 1000 ri
인 25K 25K를 사용하여 찾고 입니다.grep
.
전화를 걸 수 있는 두 가지 다른 방법에 주목하십시오.cgrep
▁parallels것과 같은 것grep
방법.
4줄의 코드를 절약할 수 있는 "$2"가 설정되었을 때만 전달되는 함수를 만드는 "niftier" 방법이 있습니다.하지만 저는 그것을 손에 쥐고 있지 않습니다. 같은 거.${parm2} $parm2
제가 찾으면 기능과 이 답변을 수정하겠습니다.
와 함께gawk
일치 기능을 사용할 수 있습니다.
x="hey there how are you"
echo "$x" |awk --re-interval '{match($0,/(.{4})how(.{4})/,a);print a[1],a[2]}'
ere are
이 괜찮다면요.perl
보다 유연한 솔루션: Following은 패턴 앞에 3자, 그 다음에 실제 패턴, 그리고 그 다음에 5자를 인쇄합니다.
echo hey there how are you |perl -lne 'print "$1$2$3" if /(.{3})(there)(.{5})/'
ey there how
이것은 문자 대신 단어에도 적용될 수 있습니다.Following은 실제 일치하는 문자열 앞에 한 단어를 인쇄합니다.
echo hey there how are you |perl -lne 'print $1 if /(\w+) there/'
hey
다음은 패턴 뒤에 한 단어를 인쇄합니다.
echo hey there how are you |perl -lne 'print $2 if /(\w+) there (\w+)/'
how
Following(팔로우)은 패턴 앞에 한 단어, 그 다음에 실제 단어, 그 다음에 패턴 뒤에 한 단어를 인쇄합니다.
echo hey there how are you |perl -lne 'print "$1$2$3" if /(\w+)( there )(\w+)/'
hey there how
ugrep을 사용하여 지정할 수 있습니다.-ABC
이 " " " 인 -o
(--only-matching
) 일치 전후에 문맥의 추가 문자와 일치하는 내용을 표시합니다. 지정된 범위 내에서 일치하는 내용과 일치하는 내용을 추가합니다.-ABC
너비. 예:
ugrep -o -C30 pattern testfile.txt
제공:
1: ... long line with an example pattern to match. The line could...
2: ...nother example line with a pattern.
색상 강조 표시가 있는 터미널에서도 동일하게 다음을 제공합니다. 한 줄에 여러 개의 일치 항목이 [+nn more]: 또는 옵션으로 표시됩니다.-k
(--column-number
) 컨텍스트 및 열 번호와 함께 각 항목을 개별적으로 표시합니다. 컨텍스트 너비는 ASCII뿐만 아니라 표시되는 유니코드 문자 수(UTF-8/16/32)입니다.
저는 개인적으로 게시된 답변과 비슷한 것을 합니다.하지만 도트 키는 다른 키보드 키처럼 탭하거나 누를 수 있기 때문에..그리고 저는 많은 컨텍스트가 필요하지 않은 경우가 많습니다(더 필요하다면 grep-C와 같은 라인을 수행할 수도 있지만 종종 당신처럼 앞뒤의 라인은 원하지 않습니다). 그래서 저는 명령을 입력하는 것이 훨씬 더 빠르다는 것을 알게 되었습니다. 점 키를 몇 개 누른 다음 키를 누르거나 더 길게 누르면 됩니다.
예.echo zzzabczzzz | grep -o '.abc..'
앞과 뒤에 점이 하나씩 있는 abc 패턴을 가질 것입니다. (regex 언어에서 도트는 임의의 문자와 일치합니다.)다른 사람들도 반복을 지정하기 위해 점을 사용했지만 중괄호가 곱슬곱슬하게 있습니다.
(0 또는 x)자와 정확히 y자 사이에서 엄격하고 싶다면 곡선을 사용합니다.다른 사람들이 그랬던 것처럼 -P.
도트가 새 라인과 일치하는지 여부에 대한 설정이 있지만 관심사/관심사일 경우 확인할 수 있습니다.
ripgreg를 사용하는 경우 다음과 같이 수행할 수 있습니다.
grep -E -o ".{0,5}test_pattern.{0,5}" test.txt
regeexp grep을 사용하여 강조 표시를 +초로 찾을 수 있습니다.
echo "some123_string_and_another" | grep -o -P '.{0,3}string.{0,4}' | grep string
23_ string_and
언급URL : https://stackoverflow.com/questions/8101701/grep-characters-before-and-after-match
'programing' 카테고리의 다른 글
GitHub 리포지토리에서 변경한 내용으로 로컬 리포지토리 업데이트 (0) | 2023.04.26 |
---|---|
Excel에서 sqlite 데이터베이스로 데이터 내보내기 (0) | 2023.04.26 |
하루 중 시간이 아닌 시간 지속 시간으로 작업 (0) | 2023.04.26 |
WPF 데이터 그리드 행을 두 번 클릭 이벤트를 프로그래밍 방식으로 (0) | 2023.04.26 |
사용 가능한 공간을 채우기 위해 WPF의 컨트롤을 얻는 방법은 무엇입니까? (0) | 2023.04.26 |