"grep -v "^.$""는 무엇을 합니까?

"grep -v "^.$""는 무엇을 합니까?

데이터 파일을 정리하는 스크립트가 있습니다.

주문하다:

for i in `find /ddomain/data/shop12/ -mtime +15 -print|grep -v "^.$" |grep data-`

해당 기능 없이 명령을 실행해 보았지만 grep -v아무런 차이가 없었습니다.

나는 그것이 무엇을하는지 알고 싶습니다 grep -v "^.$". 나는 이 스크립트를 만들지 않았으며 온라인에서 아무것도 찾을 수 없습니다.

답변1

grep -v "^.$"문자가 하나만 있는 줄을 제외하고 입력의 모든 줄을 인쇄합니다.

다음과 같은 용도로 사용되기 때문입니다.

find /ddomain/data/shop12/ -mtime +15 -print|grep -v "^.$"

의 출력에서 ​​현재 작업 디렉터리(상대 경로를 사용할 때 표시됨)를 삭제한다고 가정할 수 있습니다. .이는 옵션을 사용하여 쉽게 달성할 수 있지만 여기서는 에서 절대 경로를 사용하기 때문에 중복됩니다.find.-mindepth 1find

data-나중에 는 이름에 .이 있는 파일 만 검색하게 되는데 grep data-, 이 역시 중복됩니다. find한 번의 호출에 모든 논리를 넣을 수 있습니다 .

find /ddomain/data/shop12/ -name '*data-*' -mtime +15 -print

또한 -print기본 작업인 delete 를 수행합니다.

find /ddomain/data/shop12/ -name '*data-*' -mtime +15

파일만 찾는 경우 -type f다음도 추가하세요.

find /ddomain/data/shop12/ -type f -name '*data-*' -mtime +15

답변2

다른 사람들이 이미 말했듯이, grep -v '^.$'단 하나의 문자로 구성된 줄을 필터링하십시오(줄 시작( ^), 문자( .), 줄 끝( )으로 구성된 줄). 이를 작성하는 또 다른 방법은 where, 만들기 및 암시적( 일치 ) $입니다. 전체 라인).grep -vx .-x^$.

출력 정보:

find /ddomain/data/shop12/ -mtime +15 -print

이 명령의 출력은 find일반적으로 다음 줄로 구성되므로 이는 의미가 없습니다.

/ddomain/data/shop12/foo
/ddomain/data/shop12/foo/bar
...

이 출력에 단일 문자가 포함된 줄이 포함되는 유일한 방법은 와 유사한 이름이 있는 경우입니다 foo<newline>X<newline>. 이는 전적으로 가능하지만 명령의 의도는 아닐 것입니다.

이 명령은 다음에서 (잘못) 적용될 수 있습니다.

find . -mtime +15 -print | grep -v '^.$' | grep data-

목적 은 항목을 grep필터링하는 것입니다 .(이것이 grep -Fvx .더 적절할 수도 있음). 그러나 다음과 같이 작성하는 것이 더 합리적입니다.

find . ! -name . -path '*data-*' -mtime +15

최상위 디렉터리를 필터링하려면 find /ddomain/data/shop12/다음을 수행하세요.

find /ddomain/data/shop12/. ! -name . -path '*data-*' -mtime +15

또는 find구현이 조건자를 지원 하는 경우 -mindepth:

find /ddomain/data/shop12/ -mindepth 1 -path '*data-*' -mtime +15

답변3

.결과 목록에서 디렉토리를 제거합니다 find. 예를 들어 설명하는 것이 더 쉽습니다.

find . -print
.
./prova2
./prova2/prova2  

find . -print | grep -v '^.$'
./prova2
./prova2/prova2  

보시다시피 첫 번째 코드에서 .결과를 찾았습니다. 그래서 당신은 그것이 취하는 행동을 위해 그것을 루프에 전달합니다 for. 두 번째 코드 조각에서는
의 결과에서 해당 디렉터리를 건너뛰기로 결정하여 루프로 보내지 않습니다..findfor

답변4

grep -v '^.$'문자가 하나만 있는 줄을 제외합니다.

예:

echo "foo
> bar
> x" | grep -v '^.$'
foo
bar

관련 정보