[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ]
描述:此命令将读取文件并打印到标准输出设备上(显示、读取或拼接文件内容), 常用来显示文件的内容类似于windows系统里的type
命令。
语法参数:
# 用法:
cat [选项]... [文件]...
# 参数:
-A, --show-all 等效于 -vET,显示所有控制字符
-b, --number-nonblank 对非空输出行编号,同时取消 -n 选项效果
-e 等效于 -vE
-E, --show-ends 在每行结束处显示"$"
-n, --number 对输出的所有行编号
-s, --squeeze-blank 不输出多行空行,即压缩连续的空行为一行
-t 与 -vT 等效
-T, --show-tabs 将跳格字符显示为^I
-u (被忽略)
-v, --show-nonprinting 使用^ 和M- 引用,除了LFD和 TAB 之外
温馨提示:当文件较大的时候建议采用more或者less命令进行查看文件,若文件行数较多时可以采用下述快捷键来停止。
实用案例:
# 1.同时显示文件fl.txt和f2.txt的内容
cat f1.txt f2.txt
# 2.将文件ml和m2合并后放入文件file.txt中
cat m1 m2 > file.txt
# 3.显示文件内容及行数
cat -n /etc/issue
1 \S
2 Kernel \r on an \m
3
# 排除空行显示行数
cat -b /etc/issue
1 \S
2 Kernel \r on an \m
# 4.特殊字符的显示
cat -A /etc/pam.conf
# ---------------------------------------------------------------------------#$
# /etc/pam.conf^I^I^I^I^I^I^I^I #$
# ---------------------------------------------------------------------------#$
#$
# NOTE$
# ----$
#$
# 5.从命令行中获取命令结果字符串以及变量写入文件之中。
# 方式1
cat << EOF > es.env
AUTHOR=${NAME}
$(ip addr)
EOF
# 方式2
cat > demo2.yaml <<EOF
AUTHOR=${NAME}
$(ip addr)
EOF
# 执行结果: name=WeiyiGeek
# 使用cat输出变量到文件时如果是"EOF"并不会将该变量进行赋值改变(小差别值得注意)。
demo="WeiyiGeek"
cat > demo1.yaml <<"EOF"
name=${demo}
EOF
# 执行结果: name=${demo}
# 5.从终端键盘输入字符串到 cat.log 文件中,
cat > write.log
全栈工程师修炼指南
blog.weiyigeek.top
ctrl+d # 结束输入
# 6.实现标准输出和标准错误互换。
(cat /etc/redhat-release /etc/os-release-no 3>&1 1>&2 2>&3 ) > err.log 2> info.log
$ cat err.log
# cat: /etc/os-release-no: 没有那个文件或目录
$ cat info.log
# Rocky Linux release 9.3 (Blue Onyx)
# 7.管道符也可以与重定向结合使用实现更改weiyigeek用户密码
cat pass.txt | passwd --stdin weiyigeek &> /dev/null
# 8.使用输入重定向与管道符快速实现资源清单的部署
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: alpine-app
spec:
containers:
- name: alpine-app
image: alpine:latest
args:
- sleep
- "100000"
EOF
weiyigeek.top-cat命令使用案例
描述: 此命令将文件从最后一行开始显示到第一行,即是cat命令
结果的反向输出。
语法参数:
Usage: tac [OPTION]... [FILE]...
-b # 在连接分离器之前而不是之后
-r|--regex # 使用正则表达式
-s|--separator # 指定分隔符
实例演示
示例1.cat
与 tac
命令对比显示
# 从首行到末行
$ cat /etc/resolv.conf
nameserver 223.5.5.5
nameserver 223.6.6.6
nameserver fec0:0:0:ffff::1
# 从末行到首行
$ tac /etc/resolv.conf
nameserver fec0:0:0:ffff::1
nameserver 223.6.6.6
nameserver 223.5.5.5
示例2.tac
命令其他使用示例:
# 交互式输入
$ tac
a
bb
ccc
# ctrl+d # 结束输入
ccc
bb
a
# 管道输入
seq 5 | tac
5
4
3
2
1
描述:该命令将同一行的内容逆向输出,非常简单。
语法参数:
Usage: rev [options] [file ...]
使用示例:
# 交互式
$ echo "hello world!" | rev
!dlrow olleh
# 逆向输出文件内容
$ cat file.txt
abc
1,2,3,4,5,6,7,8,9,10
$ rev file.tx
cba
01,9,8,7,6,5,4,3,2,1
描述: 该命令是添加行号打印;
语法参数:
nl [-bnw] 文件
# 参数:
-b :指定行号指定的方式主要两个中方式
a : 不论是否有空行页列出行号
t : 对于空行不列出行号进行跳过
- n : 列出行号的表示方法主要有三种
ln : 行号在屏幕最左方显示,默认是不带0
rn : 行号在屏幕tab键+行号显示
rz : 行号在屏幕最右方显示,使用0向左补齐
- w : 行号字段占用的位数
基础示例:
# 1.列出/etc/issue的内容包括空行行号
$ nl -b a /etc/issue
1 Ubuntu 20.04 LTS \n \l
2 Windows WSL
3
# 2.行号格式设置
$ nl -b a -n rz /etc/issue # 缺省
000001 Ubuntu 20.04 LTS \n \l
000002 Windows WSL
000003
# 3.行号在屏幕最右方显示右方,指定行号宽度为3
$ nl -b a -n rz -w 3 /etc/issue
001 Ubuntu 20.04 LTS \n \l
002 Windows WSL
003
描述:此命令实现文本文件的逐页显示,使用空格键翻页,回车键换行,按q退出。
温馨提示:more 命令不同于 cat 命令的是,它不是一次性的显示所有文件内容,而是逐页显示文件内容。
语法格式:
# 格式
more [options] <file>...
# 参数
-d 显示翻页并退出提示
-f 计算实际行而不是屏幕行
-l 抑制表单提要后的暂停
-c 不滚动、显示文本和清理行尾
-p 不滚动, 清理屏幕中的显示的文本
-s 将多个空行压缩成一行显示
-u 抑制下划线
-<number> 指定每屏的行数
+<number> 显示指行数后的内容
+/<string> 显示从搜索字符串匹配开始的内容
实例演示
示例1.more
命令使用示例:
$ more -d /var/log/dmesg
# [ 0.000000] kernel: vmware: TSC freq read from hypervisor : 2100.000 MHz
# --More--(3%)[Press space to continue, 'q' to quit.]
# 2.将文件中的多空行只显示一行
$ more -s a.txt
weiyigeek
公众号:全栈工程师修炼指南
博客:weiyigeek.top
# 3.只显示指定数量的行内容。
$ more -3 a.txt
weiyigeek
博客:全栈工程师修炼指南
# 4.显示指定行数后的内容
$ more +3 a.txt
全栈工程师修炼指南
weiyigeek.top
描述:该命令的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览,以及快速使用vi进行编辑,所以在日常使用中,less命令比more命令更实用一些。
语法参数:
less [-[+]aABcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]
[-b space] [-h lines] [-j line] [-k keyfile]
[-{oO} logfile] [-p pattern] [-P prompt] [-t tag]
[-T tagsfile] [-x tab,...] [-y lines] [-[z] lines]
[-# shift] [+[+]cmd] [--] [filename]...
# 参数:
-b <缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x <数字> 将“tab”键显示为规定的数字空格
快捷按键及其功能:
# 基础操作
b 向前翻一页
f 向后翻一页
u 向前翻半页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
y 向前滚动一行
空格键 滚动一页
回车键 滚动一行
:n - 浏览下一个文件
:p - 浏览前一个文件
# 文件搜索
/ : 使用一个模式进行搜索,并定位到下一个匹配的文本
? : 使用模式进行搜索,并定位到前一个匹配的文本
n : 向前查找下一个匹配的文本
N : 向后查找前一个匹配的文本
# 全屏导航
ctrl + B :向前移动一屏
ctrl + F :向后移动一屏
ctrl + D :向前移动半屏
ctrl + U :向后移动半屏
j : 向前移动一行
k : 向后移动一行
G : 移动到最后一行
g : 移动到第一行
q / ZZ : 退出 less 命令
# 标记导航 当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置。
ma :使用 a 标记文本的当前位置
'a :导航到标记 a 处'
# 编辑文件
v :进入编辑模式,使用配置的编辑器(nano、vim)编辑当前文件.
实用案例:
# 示例1.一次浏览多个文件。
$ less f1.txt f2.txt
# 当打开多个文件时,使用如下命令在多个文件之间切换
:n - 浏览下一个文件
:p - 浏览前一个文件
# 示例2.正在浏览一个文件时,使用 :e 打开另一个文件。
$ less f1.txt
:e f2.txt
# 示例3.显示行号并且在文件末尾自己关闭文件
less -N -e f1.txt
# 示例4.显示进度百分并进行搜索
less -N -e -m .txt
/UP # 搜索并高亮显示匹配的文本
/LOWE\S{1}_UP # LOWER_UP 搜索并高亮显示匹配的文本, n/N 切换搜索方向
# 示例5.配合管道符输出来将其他命令输出的结果进行分页显示
tree -d /etc | less
weiyigeek.top-less示例
描述:用于显示文件的开头的内容,在默认情况下,head命令显示文件的头10行内容。如果指定了多于一个文件在每一段输出前会给出文件名作为文件头,如果不指定文件,或者文件为"-",则从标准输入读取数据。
语法参数:
用法:head [选项]... [文件]...
# 参数
-数字 :显示行数
-n <数字> :指定文件头部要显示内容的行数;
-c <字节> :指定显示头部内容的字节数K;
-v :总是显示文件名的头信息;
-q : 不显示文件名信息;
# 所给定的数字 K 后面可以附加乘数后缀:b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,GB 1000*1000*1000, G 1024*1024*1024, 对于 T, P, E, Z, Y 同样适用,也可以使用二进制前缀,如:KiB=K,MiB=M 等等。
操作示例:
# 1.基础示例
head /etc/passwd # 缺省显示开头前10行
head -1 /etc/passwd # 显示指定从开头到k行
head -2 run.js
# const { exec } = require('child_process')
# exec('hexo server -p 80 -d',(error, stdout, stderr) => {
# 2. 除最后10行外,显示剩余全部内容
head -n -10 /etc/passwd
# 2.1 显示指定数量的行
head -3 /etc/passwd
head -n +3 /etc/passwd
# 3.1个字符占1个字节,注意回车换行各算一个字节
head -c 100 /etc/passwd #显示前100字节的字符
head -c -100 /etc/passwd #显示从0到倒数第100字节的字符
# 显示1024字节(1KB)内容
head -c 1024 /etc/passwd
# 4.随机密码生成
$ cat /dev/urandom | tr -dc '[:alnum:][:graph:]'| head -c 10 | tee password.txt | passwd --stdin weiyigeek
$ cat password.txt
^469I`Le_x
weiyigeek.top-heade示例
描述:此命令恰恰与head命令相反,主要用于输入文件中的尾部内容,可以指定开始点将文件标准输出。默认在屏幕上显示指定文件的末尾10行,如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题,如果没有指定文件或者文件名为“-”,则读取标准输入。
温馨提示:在 CentOS8 以前有个tailf
命令类似于tail -f
,命令效果,当文件不增长时并不访问文件,节约资源,附上一图展示 head 与 tail 命令的区别。
weiyigeek.top-一图展示 head 与 tail 命令图
语法参数:
tail [选项]... [文件]...
# 参数
-c, --bytes=[+]NUM # 使用 -c +NUM 以输出, 每个文件第 NUM 个字节之后的全部内容
-f, --follow[={name|descriptor}] # 随文件增长即时输出新增数据;若未给定选项参数,则默认使用 'descriptor'(常用)
-F 和 --follow=name --retry 相同
-n, --lines=[+]NUM # 输出文件的尾部N(N位数字)行内容。 (常用)
--pid=<进程号> # 与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令;
-q, --quiet, --silent # 当有多个文件参数时,不输出各个文件名;
-s, --sleep-interval=N # 与“-f”选项连用,指定监视文件变化时间隔的秒数; (常用)
-v # 当有多个文件参数时,总是输出各个文件名;
-z, --zero-terminated # 以 NUL 字符而非换行符作为行尾分隔符
实际案例:
# 1.默认显示文件file的最后10行
tail file
# 2.显示文件file的内容,从第20行至文件末尾
tail +20 file
# 3.显示文件file的最后四行
tail -n 4 file
tail -4 file
# 4.显示文件file的最后10个字符
tail -c 10 file
# 5.head与tail联合使用取文件的11行到20行
head -n 20 demo.txt | tail -n 10
# 6.从第二行显示到末尾,以及显示倒数第二行到末尾
tail -n+2 /etc/passwd
cat -n /etc/passwd | tail -n-2
31 smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
32 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
# 7.每3秒更新查看文件最后3行
tail -f -n 3 -s 3 /var/log/messages
# Jun 26 08:01:01 master systemd: Removed slice User Slice of root.
# Jun 26 09:01:01 master systemd: Created slice User Slice of root.
# Jun 26 09:01:01 master systemd: Started Session 25 of user root.
# 8.只查看最新生成的文件
tail -0f /var/log/dmesg
tail -f -n0 /var/log/dmesg
# 9.与awk命令联用为持续生成的日志添加上时间戳。
$ tail -0f /tmp/test.log | awk '{print strftime("%F %T%z\t"), $0}'
$ tail -0f /tmp/test.log | awk '{now=strftime("%F %T%z\t");sub(/^/, now); print}'
# 2024-09-19 10:12:08+0800 公众号:全栈工程师修炼指南
# 10.使用 head 命令与 more 命令联用,可以实时查看日志文件的内容
seq 20 | head -n 6 | tail -n 1
seq 20 | tail -n +6 | head -n 1
注意事项:
描述:在Linux下此命令主要用于监测一个命令的运行结果,省的你一遍遍的手动运行,它可以是周期性的执行下个程序,并全屏显示执行的结果,例如,持续监控 ls 命令执行后,某个文件的占用磁盘空间的大小变化。
语法参数:
# 格式
watch [参数] [指令]
# 参数:
-n,--interval # 缺省每2秒运行一下程序,多用于周期性执行命令/定时执行命令。
-d,-differences # 高亮显示变化的区域,而-d = cumulative 选项会把变动过的地方(不管最近的那次有没有变动)都会高亮显示出来。
-t,-no-title # 关闭watch 命令在顶部的时间间隔命令
实际案例:
# 1.每隔两秒钟跳一下最后20行的内容查看事实的信息
watch -n 2 tail -20 /var/log/messages
# 2.每隔一秒高亮显示网络链接数的变化情况 (重要)
watch -n 1 -d netstat -ant
# 3.与grep命令联用每隔一秒高亮显示http 链接数的变化情况,后面接的命令若带有管道符,需要加“将命令区域使用 '' 包含”。
watch -n 1 -d ' pstree | grep http '
# 4.实时查看模拟攻击客户机建立起来的链接数
watch 'netstat -an | grep :21 | \grep 192.168.12.21 | wc \-l'
# 5.检测当前目录中 scf ' 的文件的变化
watch -d 'ls -l | grep scf'
# 6.10秒一次输出系统的平均负载
watch -n 10 'cat /proc/loadavg'
weiyigeek.top-watch命令使用示例
描述: 此命令主要用于查看可执行文件内容,并以十六(hex)进行显示,除此之外,还可使用ASCII、十进制、十六进制、八进制转储进行查看。
语法参数:
usage: hexdump [-bcCdovx] [-e fmt] [-f fmt_file] [-n length]
[-s skip] [file ...]
hd [-bcdovx] [-e fmt] [-f fmt_file] [-n length]
[-s skip] [file ...]
# 参数
-b 单字节八进制显示。
-c 单个字节字符显示。
-C 使用十六进制和ACSII字符显示。
-d 双字节十进制显示。
-o 双字节八进制显示。
-x 双字节十六进制显示。
-e 格式字符串 指定用于显示数据的格式字符串。
-f 格式文件 指定一个包含一个或多个换行符分隔格式字符串的文件
-n 长度:仅解释输出的长度字节。
-s 偏移:从输入的开头跳过偏移字节。
-v :使hexdump显示所有输入数据。
实用示例:
$ cat win.txt.1 ; cat linux.txt
a
b
c
$ file win.txt.1
win.txt.1: ASCII text, with CRLF line terminators
$ file linux.txt
linux.txt: ASCII text
$ hexdump win.txt.1
0000000 0d61 620a 0a0d 0d63 000a
0000009
$ hexdump linux.txt
0000000 0a61 0a62 0a63
0000006
# 若要将Window的文本文件转换为Linux格式,可以使用dos2unix命令,反之即unix2dos命令,或 vim 编辑中进行转换。
$ dos2unix win.txt.1
$ unix2dos linux.txt
weiyigeek.top-Windows、Linux 系统下创建的文本内容的差异图
示例2.从管道符以及文件中读取内容。
# 从管道符中读取内容
$ echo {a..z} | tr -d " " | hexdump -C
00000000 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 |abcdefghijklmnop|
00000010 71 72 73 74 75 76 77 78 79 7a 0a |qrstuvwxyz.|
0000001b
# 显示长度为512的字节内容
$ hexdump -C -n 256 hello
地址 十六进制 acsii 字符
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 03 00 3e 00 01 00 00 00 60 10 00 00 00 00 00 00 |..>.....`.......|
00000020 40 00 00 00 00 00 00 00 78 39 00 00 00 00 00 00 |@.......x9......|
示例3.自定义格式化显示输出
# Some examples for the -e option:
# hex bytes
echo hello | hexdump -v -e '/1 "%02X "' ; echo
# 68 65 6C 6C 6F 0A
# same, with ASCII section
echo hello world | hexdump -e '8/1 "%02X ""\t"" "' -e '8/1 "%c""\n"'
# 68 65 6C 6C 6F 20 77 6F hello wo
# 72 6C 64 0A rld
# hex with preceding 'x'
echo hello | hexdump -v -e '"x" 1/1 "%02X" " "' ; echo
# x68 x65 x6C x6C x6F x0A
# one hex byte per line
echo hello | hexdump -v -e '/1 "%02X\n"'
68
65
6C
6C
6F
0A
`
# byte# & ASCII with control chars(含控制符)
% echo hello | hexdump -v -e '/1 "%_ad# "' -e '/1 " _%_u\_\n"'
0# _h_
1# _e_
2# _l_
3# _l_
4# _o_
5# _lf_
# a table of byte#, hex, decimal, octal, ASCII chars (不含控制符)
echo "hello world" | hexdump -v -e '/1 "%_ad# "' -e '/1 "hex = 0x%02X"' -e '/1 " dec = %03i "' -e '/1 " oct = %03o"' -e '/1 " -> %c\n"'
0# 68 hex = 104 dec = 150 oct = _h_
1# 65 hex = 101 dec = 145 oct = _e_
2# 6C hex = 108 dec = 154 oct = _l_
3# 6C hex = 108 dec = 154 oct = _l_
4# 6F hex = 111 dec = 157 oct = _o_
5# 0A hex = 010 dec = 012 oct = _
描述:jq它能轻松地把你拥有的数据转换成你期望的格式,而且需要写的程序通常也比你期望的更加简短。它可以对json数据进行分片、过滤、映射和转换
,和sed、awk、grep等命令一样,都可以让你轻松地把玩文本。
基础语法:
Usage: jq [options] <jq filter> [file...]
-c 单行输出json字符串;
-n 使用“null”作为单个输入值;
-e 设置输出时候的退出状态码;
-s read (slurp) all inputs into an array; apply filter to it;
-r output raw strings, not JSON texts; 输出原始字符串,而不是JSON文本;
-R read raw strings, not JSON texts;
-C colorize JSON;
-M monochrome (dont colorize JSON);
-S sort keys of objects on output;
--tab use tabs for indentation;
--arg a v set variable $a to value <v>;
--argjson a v set variable $a to JSON value <v>;
--slurpfile a f set variable $a to an array of JSON texts read from <f>;
--rawfile a f set variable $a to a string consisting of the contents of <f>;
--args remaining arguments are string arguments, not files;
--jsonargs remaining arguments are JSON arguments, not files;
注意事项:
基础示例:
范例文件(json.txt):
[{"name":"WeiyiGeek","url":"http://tool.chinaz.com","address":{"city":"xiameng","country":"China"},"arrayBrowser":[{"name":"Google","url":"http://www.google.com"},{"name":"Baidu","url":"http://www.baidu.com"}]},{"name":"WeiyiGeek","url":"http://tool.zzhome.com","address":{"city":"dalian","country":"China"},"arrayBrowser":[{"name":"360","url":"http://www.so.com"},{"name":"bing","url":"http://www.bing.com"}]}]
echo '{"foo": 0,"bar":1}' | ./jq .
{
"foo": 0,
"bar": 1
}
cat > json.txt <<'EOF'
[{
"name": "WeiyiGeek",
"url": "http://tool.chinaz.com",
"address": {
"city": "厦门",
"country": "China"
}
},
{
"name": "Weiyi",
"url": "http://tool.chinaz.com",
"address": {
"city": "长沙",
"country": "China"
}
}]
EOF
cat json.txt | jq '.' #方式1.可以采用管道符传递数据
jq '.' json.txt #方式2.美化输出
jq -r '.' json.txt
#如果json是数组的话,可以采用此种方法;
jq -r '.[0]' json.txt
jq '.[0]' json.txt
{
"name": "WeiyiGeek",
"url": "http://tool.chinaz.com",
"address": {
"city": "厦门",
"country": "China"
}
}
#遍历访问每个元素的属性
jq -r ".[].name" json.txt
WeiyiGeek
Weiyi
cat json.txt | jq '.[0] | {name:.name,city:.address.city}'
{
"name": "WeiyiGeek",
"city": "厦门"
}
#值得注意的地方 [] 索引值
cat json.txt | jq '.[0] | {name:.arrayBrowser[1].name,city:.address.city}'
{
"name": "Baidu",
"city": "厦门"
}
#遍历数组,注意下面的[]没有加上索引默认是全部满足条件的
cat json.txt | jq ".[] | {name:.arrayBrowser[1].name,city:.address.city}"
{
"name": "Baidu",
"city": "厦门"
}
{
"name": "bing",
"city": "大连"
}
cat json.txt | jq "[.[] | {name:.arrayBrowser[1].name,city:.address.city}]"
[
{
"name": "Baidu",
"city": "厦门"
},
{
"name": "bing",
"city": "大连"
}
]
cat json.txt | jq "[.[] | {name_001:.arrayBrowser[1].name,city_002:.address.city}]"
[
{
"name_001": "Baidu",
"city_002": "厦门"
},
{
"name_001": "bing",
"city_002": "大连"
}
]
# 补充
curl -s -u 'weiyigeek:123456' -H 'Accept: application/vnd.docker.distribution.manifest.v2+json' -X GET https://localhost/v2/library/alpine/manifests/3.12 | jq '.layers[0]'
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 2797541,
"digest": "sha256:df20fa9351a15782c64e6dddb2d4a6f50bf6d3688060a34c4014b0d9a752eb4c"
}
#比如key是用来获取JSON中的key元素的:
$ jq 'keys' json.txt
[
0,
1
]
#比如has是用来是判断是否存在某个key,注意这里由于和shell中的{}冲突所以用()
[root@192 ~]# jq 'has(2)' json.txt
false
[root@192 ~]# jq 'has(1)' json.txt
true
$ jq -r '.[1].name+","+(.[1].url|tostring)' json.txt
Weiyi,http://tool.chinaz.com
$ jq -r '.[].name+","+(.[1].url|tostring)+","+.[].address.city' json.txt
WeiyiGeek,http://tool.chinaz.com,厦门
Weiyi,http://tool.chinaz.com,厦门
WeiyiGeek,http://tool.chinaz.com,长沙
Weiyi,http://tool.chinaz.com,长沙
jq -r "[.[].name]" json.txt
[
"WeiyiGeek",
"Weiyi"
]
#字符串拼接
jq -r '[.[].name]|join(",")' json.txt
WeiyiGeek,Weiyi
jq -r '[.[].name,.[].url]|@text' json.txt
["WeiyiGeek","Weiyi","http://tool.chinaz.com","http://tool.chinaz.com"]
jq -r '[.[].name,.[].url]|@text' json.txt
["WeiyiGeek","Weiyi","http://tool.chinaz.com","http://tool.chinaz.com"]
补充说明:
[]
形式,[]
表示遍历整个数组,如果你只想访问数组中的第2个元素(下标从0开始),你可以使用[1];如果想要访问第3个到第5个元素,可以使用[2:4];附录
官方文档:https://stedolan.github.io/jq/manual
表达式在线测试器:https://jqplay.org/
教程:https://github.com/stedolan/jq/wiki/Cookbook