
grep, sed, awk 또는 기타 Linux 도구나 bash 스크립트를 사용하여 파일의 각 줄에서 "\t$month\t$day\n" 시퀀스를 검색하는 방법...
\t = tab
\n = new line
$month = Sep #$month is a variable with the content “Sep”
$day = 4 #$day is a variable with the content “4”?
grep을 사용하면 각각 \t, \n, $month 및 $day를 찾을 수 있지만 잘못된 긍정을 줄이기 위해 도구가 모든 줄에서 "\t$month\t" $day\n" 조합을 검색하도록 하고 싶습니다. 일치하면 해당 행을 표준 출력, 즉 콘솔로 보냅니다.
"\t$month\t$day\n" 조합에 대해 파일의 각 줄을 검색하고 도구가 일치하는 각 줄을 콘솔에 출력하도록 하려면 어떻게 해야 합니까?
예: 다음은 "start-with-core" 파일의 내용입니다.
$ cat start-with-core
core4321 Sep 3
core.1234 Nov 4
core4 Sep 4
core10 Sep 4
core11 Nov 4
core44 Sep 2
core400 Sep 3
첫 번째 필드(열) 뒤에는 탭 문자가 있고, 두 번째 필드 뒤에는 탭 문자가 있으며, 세 번째 필드 뒤에는 줄 바꿈 문자가 있습니다.
$ echo $month
Sep
$ echo $day
4
$ grep $'\n' start-with-core
core4321 Sep 3
core.1234 Nov 4
core4 Sep 4
core10 Sep 4
core11 Nov 4
core44 Sep 2
core400 Sep 3
$ grep $'\t' start-with-core
core4321 Sep 3
core.1234 Nov 4
core4 Sep 4
core10 Sep 4
core11 Nov 4
core44 Sep 2
core400 Sep 3
$ grep "$month" start-with-core
core4321 Sep 3
core4 Sep 4
core10 Sep 4
core44 Sep 2
core400 Sep 3
$ grep "$day" start-with-core
core4321 Sep 3
core.1234 Nov 4
core4 Sep 4
core10 Sep 4
core11 Nov 4
core44 Sep 2
core400 Sep 3
어떤 아이디어가 있나요? 감사해요! 학생
///\\
답변1
grep
패턴과 일치하는 행을 찾으면 일치하는 행을 찾고 싶은 것 같습니다.끝존재하다 \t$month\t$day
.
그래서:
TAB=$(printf '\t') # or TAB=$'\t' with many shells
grep "$TAB$month$TAB$day\$" < your-file
여기서 $
(대부분의 쉘에서는 이스케이프 없이 따르는 것이 안전하더라도 쉘이 인수 확장을 위해 이를 사용하기 때문에 여기에서 이스케이프됨 "
)는 주제의 끝과 일치합니다.
awk
표 형식 데이터 처리에 적합합니다. 이를 사용하여 행을 마지막 필드 $day
및 마지막에서 두 번째 필드 와 일치시킬 수 있습니다 $month
.
M=$month D=$day awk -F '\t' '
$NF == ENVIRON["M"] && $(NF-1) == ENVIRON["D"]
' < your-file
awk
==
두 피연산자가 모두 숫자처럼 보이고 여기처럼 명시적으로 문자열로 입력되지 않은 경우 숫자 비교가 수행되므로 일치 Sep
4
하지만 Sep
04
// 4.0
...4e0