我想编写一个 bash 脚本,而不是仅打印文件的奇数行,包括没有使用sed
或的第一行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
任何状况之下,你不应该使用 shell 循环来处理文本。如果这就是你的老师对这些奇怪要求的期望,请找另一位老师,因为他们会教你不好的做法。 shell 的作用首先是运行其他命令。作为一名 shell 脚本编写者,您希望选择最适合该工作的命令(此处为perl
、sed
或awk
),或者是一组协同协作的命令,正如 Unix 作者在大约 50 年前发明这些管道时所希望的那样。
答案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