분리 문자를 변경하는 grep


12

grep을 사용하는 구분자를 변경할 수있는 방법은 무엇입니까?

기본적으로 grep은 \n구분 기호로 사용한다고 생각 합니다.


이것은 SuperUser.com에 더 적합 할 것 같습니다
Mitch Dempsey

매뉴얼 페이지를 읽고 그러한 옵션이 있는지 확인하십시오 (아니요, 믿지 않습니다).
Cascabel

이미 읽었습니다. 아니, 옵션이 없습니다

@jhon : 그런 다음 grep을 바꾸는 방법을 묻지 말고 다른 일로하고 싶은 일을하는 방법을 물어보십시오. 예를 들어 perl ( $/) 및 awk ( RS)로 레코드 구분 기호를 지정할 수 있습니다 . 또는 당신은 같은 것을 할 수 echo "$var" | sed 's/<delimiter>/\n/' | grep <pattern>있습니다. 실제 문제가 무엇인지에 따라 많은 답변이 있습니다.
Cascabel

답변:


2

출력에 대해서만 신경 쓰면 효과가 tr있을 수 있습니다.

che@nok ~ $ grep cpu /proc/cpuinfo | tr '\n' ';'
cpu family      : 6;cpu MHz             : 800.000;cpu cores     : 2;cpuid level : 10;cpu family : 6;cpu MHz : 800.000;cpu cores      : 2;cpuid level : 10;

실제로, 나는 변수 안에 저장된 이와 같은 많은 데이터를 가지고 있습니다 : 뭔가 xxxxx yyyyyy @ aaaaaaaaa bbbbb @ asdasd @ asdsda @ asds ... grep "뭔가"이것은 작동하지만 원하는대로 grep은 많은 데이터를 한 줄로 가져옵니다. 그래서 특정 문자 (여기서는 '@')로 변경하고 싶습니다

그럼 당신은 다음과 같이 넣어보십시오 :echo $my_var | tr @ '\n' | grep blahblah

나는 그것을했지만 쉘은 내용을 "실행하려고"하는 것처럼 보인다 : S

2
$my var공백과 개행을 유지 하려면 변수를 인용해야합니다 ( 예 :) echo "$my_var" | ....
mrucci

1

agrep애리조나 대학교 에서 구분 기호를 설정할 수 있습니다. grep을 대체하는 것은 아닙니다. 다른 알고리즘을 사용하며 (대략 grep, 오류와 일치 할 수 있음) 패턴 구문이 다릅니다. 그러나 편리한 도구입니다.

불행히도 라이센스 문제로 인해 유사한 프로젝트가 여러 개 있었으며 agrep모두 호환되는 것은 아닙니다. 그러나 모든 버전에서 구분 기호를 설정할 수 있다고 생각합니다.


1
case $# in
0|1|2)  cat >&2 <<EOF
    Usage: $0 delimiterstring pattern files....
    Behaves like grep -pdelimiterstring but on linux
    DOES NOT SUPPORT MOST ARGUMENTS
    unlike grep -p - leaves delimiterstring in output

    NO -p just the delimeterstring
    note: delimiterstring has to work in the sed command where the ${d} is
    if you are going to use @ in the delimeter string, then the @'s
    need to be replaced by someother character

EOF
    exit 0
;;
3)  mode=one ;;
*)  mode=many ;;
esac
d="${1}"
p="${2}"
shift 2
while [ $# -gt 1 ]
do
    sed "s@${d}@\x00@g" "${1}" | grep -z  "${p}" -  | (
        case $mode in 
        many) sed -e "s@\x00@${d}@g"  -e "s@^@${1}: @" ;;
        *)    sed -e "s@\x00@${d}@g"  ;;
        esac
    )
    shift
done

1
(1) 이렇게하면 문제가 해결 될 수 있지만 좀 더 설명이 필요한 답변을 선호합니다. 예를 들어, d="${1}"그냥 말할 이유가 d="$1"있습니까? (2) 경고를 확장해야합니다. 여러 파일에이 파일을 사용하는 경우 파일 이름에`@ '가 포함되어 있으면 문제가있는 것입니다. (3) (Nit pick) 진정한 "grep"대체 / 에뮬레이터는 0 개의 파일 인수와 함께 작동합니다.
Scott

1

grep 전에 0 구분 기호 ( '@')를 줄 바꿈 (\ n)으로 바꾸십시오.

고양이 파일 | tr '\ 00' '\ n'| grep "검색 문자열"


0

어때 ? 어떤 사용?

grep 파일 "search-string"| awk 'BEGIN {RS = "\ n"; ORS = "@"} {print}'

필요에 따라 '@'을 설정하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.