![첫 번째부터 시작하여 홀수 줄을 인쇄하십시오. [닫기]](https://linux55.com/image/218114/%EC%B2%AB%20%EB%B2%88%EC%A7%B8%EB%B6%80%ED%84%B0%20%EC%8B%9C%EC%9E%91%ED%95%98%EC%97%AC%20%ED%99%80%EC%88%98%20%EC%A4%84%EC%9D%84%20%EC%9D%B8%EC%87%84%ED%95%98%EC%8B%AD%EC%8B%9C%EC%98%A4.%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
or , &&, ||를 sed
사용하지 않고 첫 번째 줄 을 포함하여 파일의 홀수 줄만 인쇄하는 bash 스크립트를 작성하고 싶습니다.awk
답변1
그리고 perl
:
$ seq 10 | perl -ne 'print if $.%2'
1
3
5
7
9
입력에 탭이 포함되어 있지 않으면 다음을 수행할 수도 있습니다.
$ seq 10 | paste - - | cut -f1
1
3
5
7
9
GNU 사용 grep
:
$ seq 10 | grep -n '^' | LC_ALL=C grep -Po '^\d*[13579]:\K.*'
1
3
5
7
9
어떤 경우 에라도,텍스트를 처리하기 위해 쉘 루프를 사용해서는 안됩니다. 선생님이 이런 이상한 요청을 하길 기대하신다면, 나쁜 습관을 가르쳐줄 다른 선생님을 찾으세요. 쉘의 첫 번째 역할은 다른 명령을 실행하는 것입니다. 쉘 스크립터로서 여러분은 작업에 가장 적합한 명령(here 또는 perl
) 을 선택 하거나 Unix 작성자가 약 50년 전에 이러한 파이프를 발명할 때 의도한 대로 함께 작동하는 명령 세트를 선택하려고 합니다.sed
awk
답변2
다음을 수행할 수 있습니다.
while IFS= read -r line
do
printf "%s\n" "$line"
IFS= read -r _
done <"file"
다음을 사용해 보세요 seq
:
while IFS= read -r line
do
printf "%s\n" "$line"
IFS= read -r _
done < <(seq 10)
1
3
5
7
9