grep으로 검색하려는 문자열에 탭(tab)이 포함되어 있는 경우, echo 명령과 조합해서 검색할 수 있다.
echo 명령에 -e 옵션을 사용해서 탭(\t)을 출력하게 한 후 이것을 역따옴표(`)를 이용해서 grep의 변수로 넘기는 것이다. (-e 옵션은 이전 게시물을 참조하자)
아래의 예시를 보자.
test_file.txt에서 "abc[탭]def"를 검색하는 경우이다.
cat test_file.txt | grep `echo -e "abc\tdef"`
-_-; 뭔가 심각하게 착각을 했다; 된다고 생각했는데 위의 방법은 안된다 -_-;;
얼마전에 탭을 검색할 일이 있어서 위의 방법을 사용했었는데, 그때는 탭이 맨 뒤에 있는 경우였다. 즉 "abc[탭]" 이런 경우였는데, 그래서 되는 걸로 착각을 했구나;; 오류 메시지는 없으나 "abc[탭]"을 검색한 것이 아니라 "abc"를 검색한 셈이었다(어쩐지 결과가 약간 이상하더라니;;)
grep에서 탭을 제대로 인식하지 못하고, 탭 뒤에 있는 문자열을 별도의 변수로 인식한다는 문제가 있다. 예글 들어 "abc[탭]def" 문자열을 검색하려고 위처럼 grep과 echo를 사용하면 grep에서 탭 뒤에 있는 def를 파일명이라고 해석하게 된다.
탭이 포함된 문자열을 검색하려면 grep이 아니라 awk를 이용해야겠다.
test_file.txt에서 "abc[탭]def"를 검색하려면
cat test_file.txt | awk "/abc\tdef/"
또는
awk "/abc\tdef/" test_file.txt
이렇게 써야 한다.
echo 명령에 -e 옵션을 사용해서 탭(\t)을 출력하게 한 후 이것을 역따옴표(`)를 이용해서 grep의 변수로 넘기는 것이다. (-e 옵션은 이전 게시물을 참조하자)
아래의 예시를 보자.
test_file.txt에서 "abc[탭]def"를 검색하는 경우이다.
cat test_file.txt | grep `echo -e "abc\tdef"`
-_-; 뭔가 심각하게 착각을 했다; 된다고 생각했는데 위의 방법은 안된다 -_-;;
얼마전에 탭을 검색할 일이 있어서 위의 방법을 사용했었는데, 그때는 탭이 맨 뒤에 있는 경우였다. 즉 "abc[탭]" 이런 경우였는데, 그래서 되는 걸로 착각을 했구나;; 오류 메시지는 없으나 "abc[탭]"을 검색한 것이 아니라 "abc"를 검색한 셈이었다(어쩐지 결과가 약간 이상하더라니;;)
grep에서 탭을 제대로 인식하지 못하고, 탭 뒤에 있는 문자열을 별도의 변수로 인식한다는 문제가 있다. 예글 들어 "abc[탭]def" 문자열을 검색하려고 위처럼 grep과 echo를 사용하면 grep에서 탭 뒤에 있는 def를 파일명이라고 해석하게 된다.
탭이 포함된 문자열을 검색하려면 grep이 아니라 awk를 이용해야겠다.
test_file.txt에서 "abc[탭]def"를 검색하려면
cat test_file.txt | awk "/abc\tdef/"
또는
awk "/abc\tdef/" test_file.txt
이렇게 써야 한다.
덧글
cat test_file.txt | grep "<Ctrl+V><Tab>"
2개를 주로 사용하고 있습니다.
단 t 가 아니라 정말 탭을 넣어야 합니다.
일반적으로 bash 프롬프트에서는 CTRL-V CTRL-I (대문자 i)를 누르면 탭이 입력됩니다.
i.e. CTRL-V는 특수 키를 입력하는 것이고 CTRL-I는 indentation기능을 하는 tab을 의미합니다.