질문 1:
awk
아래와 같이 서로 다른 두 키워드 사이의 행을 가져오는 데 사용할 수 있습니다.
$cat test1.sh
#!/bin/bash
awk '/1/,/5/{print}' file.txt
$ cat file.txt
0
1
2
3
4
5
6
7
8
1
q
출력은 다음과 같습니다
$ sh -x test1.sh
+ awk '/1/,/5/{print}' file.txt
1
2
3
4
5
1
q
"1 2 3 4 5"만 어떻게 얻을 수 있나요? 사용하지 마십시오 grep -B
.grep -A
sed
질문 2: 두 개의 동일한 키워드 '1' 사이에서 "1 2 3 4 5 6 7 8 1"을 얻는 방법은 무엇입니까? 및 를 사용 하지 마십시오 grep -B
.grep -A
sed
답변1
내보내기를 사용할 수 있습니다.
$ awk '/1/,/5/{print}$0==5{exit}' file.txt
$ awk '$1==1{a++}a>=2{print;exit}a{print}' file.txt
1
2
3
4
5
6
7
8
1
$1==1{a++} --> 첫 번째 필드 값이 1이면 변수 a의 값을 늘립니다.
a>=2{print;exit} --> a 값이 2보다 크거나 같으면 현재 줄을 인쇄하고 종료합니다(파일을 더 이상 처리하지 않음).
a{print} --> a의 값이 0이 아니면 다음 줄을 인쇄합니다.
답변2
sed
작업에 적합한 도구입니다. 왜 사용하면 안되는지 정말 모르겠습니다. 이것이 숙제라면 선생님에게 불평하는 것을 고려해 보세요.
$ sed -n -e '/^1/,/^5/p' -e '/^5/q' file.txt
1
2
3
4
5
이 명령은 sed
( )와 및 일치하는 줄 p
사이의 모든 줄을 인쇄합니다. 또한 일치하는 줄이 발견되면 종료()됩니다. 기본 출력은 꺼짐( )입니다./^1/
/^5/
q
/^5/
-n
$ sed -n '/^[1-9]/p' file.txt
1
2
3
4
5
6
7
8
1