cut 命令是一个非常实用的工具,用于从文本中提取特定部分。
参数 功能
-b 按字节提取内容
-c 按字符提取内容
-f 按字段提取内容,需配合 -d 指定分隔符
-d 指定字段分隔符(默认是 \t)
-s 只处理包含分隔符的行
–complement 提取除指定范围外的其他部分
–output-delimiter= 指定输出的字段分隔符
1.基于字节提取 (-b 或 --bytes)
功能:根据字节位置提取内容。
语法:
cut -b <LIST> [FILE...]
:指定字节范围,可以是单个数字、范围(如 1-3)或逗号分隔的列表(如 1,3,5)。
# 提取第 1 到第 3 个字节
echo "Hello, World" | cut -b 1-3
# 输出:Hel
# 提取第 1、3、5 个字节
echo "Hello, World" | cut -b 1,3,5
# 输出:Hlo
2.基于字符提取 (-c 或 --characters)
功能:根据字符位置提取内容。
语法:
cut -c <LIST> [FILE...]
:指定字符范围,可以是单个数字、范围(如 1-3)或逗号分隔的列表(如 1,3,5)。
# 提取第 1 到第 3 个字符
echo "Hello, World!" | cut -c 1-3
# 输出:Hel
# 提取第 1、3、5 个字符
echo "Hello, World!" | cut -c 1,3,5
# 输出:Hlo
3.基于字段提取 (-f 或 --fields)
功能:根据字段提取内容。
语法:
cut -f <LIST> -d <DELIMITER> [FILE...]
:指定字段范围,可以是单个数字、范围(如 1-3)或逗号分隔的列表(如 1,3,5)。
-d :指定字段分隔符(默认是制表符 \t)。
# 提取以逗号为分隔符的第 1 和第 3 个字段
echo "name,age,city" | cut -f 1,3 -d ","
# 输出:name,city
# 提取以空格为分隔符的第 2 个字段
echo "John Doe 30" | cut -f 2 -d " "
# 输出:Doe
4.其他参数
-s 或 --only-delimited
功能:只处理包含分隔符的行。
示例:
# 只处理包含逗号的行
echo -e "name,age\nJohn" | cut -f 1 -d "," -s
# 输出:name
# 第二行 "John" 不包含逗号,因此不会被处理
5.–complement
功能:提取除指定范围外的其他部分。
示例:
# 提取除第 1 到第 3 个字符外的其他字符
echo "Hello, World!" | cut -c 1-3 --complement
# 输出:lo, World!
6.-output-delimiter=
功能:指定输出的字段分隔符(默认与输入分隔符相同)。
示例:
# 提取字段并用竖线作为输出分隔符
echo "name,age,city" | cut -f 1,3 -d "," --output-delimiter="|"
# 输出:name|city
常见用法示例
示例 1:提取 CSV 文件中的字段
# 提取 CSV 文件的第 1 和第 3 列
cut -f 1,3 -d "," data.csv
示例 2:提取日志文件中的时间戳
# 提取日志文件中每行的前 10 个字符(假设时间戳在前 10 个字符)
cut -c 1-10 access.log
示例 3:提取 IP 地址
# 提取以空格分隔的第 1 个字段(假设日志文件中 IP 地址是第 1 个字段)
cut -f 1 -d " " access.log
示例4:
195.178.110.164 - - [05/Apr/2025:13:02:58 +0800] "GET / HTTP/1.1" 400 157 "-" "-" "-"
195.178.110.164 - - [05/Apr/2025:13:03:03 +0800] "GET / HTTP/1.1" 403 153 "-" "l9tcpid/v1.1.0" "-"
195.178.110.164 - - [05/Apr/2025:13:03:03 +0800] "GET /accounts/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:04 +0800] "GET /components/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:05 +0800] "GET /core/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:06 +0800] "GET /core/app/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:07 +0800] "GET /drupal/themes/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:08 +0800] "GET /html/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:09 +0800] "GET /content../.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:10 +0800] "GET /vendor/drupal/coder/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:14 +0800] "GET /internal/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:15 +0800] "GET /cloud/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:16 +0800] "GET /assets/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:17 +0800] "GET /bin/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:18 +0800] "GET /administrator/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:18 +0800] "GET /auth/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:19 +0800] "GET /client/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:20 +0800] "GET /console/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:21 +0800] "GET /docs/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:22 +0800] "GET /drupal/modules/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:22 +0800] "GET /img../.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:23 +0800] "GET /about/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:24 +0800] "GET /etc/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:25 +0800] "GET /images/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:26 +0800] "GET /deploy/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:27 +0800] "GET /css../.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:28 +0800] "GET /lib../.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:28 +0800] "GET /cgi-bin/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:29 +0800] "GET /dashboard/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:30 +0800] "GET /download/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:31 +0800] "GET /frontend/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:32 +0800] "GET /help/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:33 +0800] "GET /home/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:34 +0800] "GET /assets../.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:35 +0800] "GET /images../.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:36 +0800] "GET /api/v2/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:36 +0800] "GET /config/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:37 +0800] "GET /img/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:38 +0800] "GET /includes/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:39 +0800] "GET /events../.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:40 +0800] "GET /media../.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:41 +0800] "GET /forum/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:42 +0800] "GET /admin-panel/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:43 +0800] "GET /customer/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:44 +0800] "GET /api/v1/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:45 +0800] "GET /backend/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:46 +0800] "GET /cache/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:47 +0800] "GET /css/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:49 +0800] "GET /drupal/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:50 +0800] "GET /files/.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:51 +0800] "GET /js../.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
195.178.110.164 - - [05/Apr/2025:13:03:52 +0800] "GET /static../.git/config HTTP/1.1" 403 153 "-" "l9explore/1.2.2" "-"
122.117.0.101 - - [05/Apr/2025:13:04:25 +0800] "GET / HTTP/1.0" 200 4833 "-" "curl/7.88.1" "-"
92.255.85.120 - - [05/Apr/2025:13:10:56 +0800] "\x03\x00\x00/*\xE0\x00\x00\x00\x00\x00Cookie: mstshash=Administr" 400 157 "-" "-" "-"
185.40.4.51 - - [05/Apr/2025:13:34:43 +0800] "GET / HTTP/1.1" 200 4833 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.46" "-"
35.195.157.58 - - [05/Apr/2025:13:40:57 +0800] "GET / HTTP/1.1" 403 153 "-" "python-requests/2.32.3" "-"
154.81.156.10 - - [05/Apr/2025:13:42:10 +0800] "PROPFIND / HTTP/1.1" 403 153 "-" "-" "-"
154.81.156.35 - - [05/Apr/2025:13:42:53 +0800] "GET / HTTP/1.1" 200 4833 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.46" "-"
185.91.127.81 - - [05/Apr/2025:13:46:31 +0800] "\x05\x01\x00" 400 157 "-" "-" "-"
185.91.127.81 - - [05/Apr/2025:13:46:31 +0800] "\x04\x01\x01\xBB\x00\x00\x00\x01proxychecker\x00pro.ip-api.com\x00" 400 157 "-" "-" "-"
185.91.127.81 - - [05/Apr/2025:13:46:31 +0800] "CONNECT pro.ip-api.com:443 HTTP/1.1" 400 157 "-" "-" "-"
188.166.49.135 - - [05/Apr/2025:13:51:31 +0800] "GET / HTTP/1.1" 200 4833 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0" "-"
106.53.113.155 - - [05/Apr/2025:13:59:22 +0800] "GET /api/revision/SelectNewUserLevelAcceptCheck?UserId=21486432&GameId=124&SerialNo=12417518562201890470&timeStamp=1739684282&Sign=7fa11a958a0ddf8071caa76ce0e74bc4 HTTP/1.1" 403 153 "-" "okhttp/3.12.1" "-"
104.234.115.56 - - [05/Apr/2025:13:59:38 +0800] "GET / HTTP/1.0" 200 4833 "-" "'Mozilla/5.0 (compatible; GenomeCrawlerd/1.0; +https://www.nokia.com/genomecrawler)'" "-"
104.234.115.56 - - [05/Apr/2025:13:59:44 +0800] "\x16\x03\x01\x00\xEE\x01\x00\x00\xEA\x03\x03\xDC|O`\xB4d\xF9\x91" 400 157 "-" "-" "-"
104.234.115.56 - - [05/Apr/2025:14:00:14 +0800] "GET / HTTP/1.1" 200 4833 "-" "'Mozilla/5.0 (compatible; GenomeCrawlerd/1.0; +https://www.nokia.com/genomecrawler)'" "-"
104.234.115.56 - - [05/Apr/2025:14:03:25 +0800] "\x16\x03\x01\x00\xFA\x01\x00\x00\xF6\x03\x03\x0B(3\x19bL\xA0\x81sO\xE5Z\x08H1\xAF-\xBF\xB6\xBEd\x1A\xDF\xF3\xBF" 400 157 "-" "-" "-"
104.234.115.56 - - [05/Apr/2025:14:03:28 +0800] "GET /favicon.ico HTTP/1.1" 404 3650 "-" "'Mozilla/5.0 (compatible; GenomeCrawlerd/1.0; +https://www.nokia.com/genomecrawler)'" "-"
47.94.224.232 - - [05/Apr/2025:14:03:41 +0800] "GET /login HTTP/1.1" 404 3650 "-" "Mozilla/5.0" "-"
93.174.93.12 - - [05/Apr/2025:14:10:10 +0800] "\x16\x03\x02\x01o\x01\x00\x01k\x03\x02RH\xC5\x1A#\xF7:N\xDF\xE2\xB4\x82/\xFF\x09T\x9F\xA7\xC4y\xB0h\xC6\x13\x8C\xA4\x1C=\x22\xE1\x1A\x98 \x84\xB4,\x85\xAFn\xE3Y\xBBbhl\xFF(=':\xA9\x82\xD9o\xC8\xA2\xD7\x93\x98\xB4\xEF\x80\xE5\xB9\x90\x00(\xC0" 400 157 "-" "-" "-"
59.82.21.138 - - [05/Apr/2025:14:14:20 +0800] "GET / HTTP/1.1" 200 4833 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5182.81 Safari/537.36" "-"
59.82.21.138 - - [05/Apr/2025:14:14:20 +0800] "GET / HTTP/1.1" 200 4833 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.2646.58 Safari/537.36" "-"
59.82.21.138 - - [05/Apr/2025:14:14:20 +0800] "GET /favicon.ico HTTP/1.1" 404 3650 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.2646.58 Safari/537.36" "-"
59.82.21.138 - - [05/Apr/2025:14:14:20 +0800] "GET /img/centos-logo.png HTTP/1.1" 200 3030 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.1282.134 Safari/537.36" "-"
59.82.21.138 - - [05/Apr/2025:14:14:20 +0800] "GET / HTTP/1.1" 200 4833 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.2213.192 Safari/537.36" "-"
59.82.21.138 - - [05/Apr/2025:14:14:20 +0800] "GET /favicon.ico HTTP/1.1" 404 3650 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.2213.192 Safari/537.36" "-"
20.65.194.130 - - [05/Apr/2025:14:25:57 +0800] "GET / HTTP/1.1" 400 255 "-" "Mozilla/5.0 zgrab/0.x" "-"
109.205.213.198 - - [05/Apr/2025:14:30:15 +0800] "GET / HTTP/1.1" 200 4833 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.46" "-"
64.62.156.190 - - [05/Apr/2025:14:41:55 +0800] "GET / HTTP/1.1" 200 4833 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" "-"
154.81.156.10 - - [05/Apr/2025:14:44:26 +0800] "PROPFIND / HTTP/1.1" 403 153 "-" "-" "-"
64.62.156.184 - - [05/Apr/2025:14:45:56 +0800] "GET /webui/ HTTP/1.1" 404 3650 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15" "-"
185.189.182.234 - - [05/Apr/2025:14:47:02 +0800] "GET / HTTP/1.1" 400 157 "-" "-" "-"
64.62.156.187 - - [05/Apr/2025:14:48:35 +0800] "GET /favicon.ico HTTP/1.1" 404 3650 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" "-"
64.62.156.190 - - [05/Apr/2025:14:52:41 +0800] "GET /geoserver/web/ HTTP/1.1" 404 3650 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" "-"
198.235.24.134 - - [05/Apr/2025:14:53:41 +0800] "\x16\x03\x01\x00\xCA\x01\x00\x00\xC6\x03\x03\xAF[>p3\x1AS\x0B(g#k\xCC\xCF\xB4\xD4\xC8\x85e\xCF\xC0W\x014 h\x9A\xFE\x9F\xBB#\xF3\x00\x00h\xCC\x14\xCC\x13\xC0/\xC0+\xC00\xC0,\xC0\x11\xC0\x07\xC0'\xC0#\xC0\x13\xC0\x09\xC0(\xC0$\xC0\x14\xC0" 400 157 "-" "-" "-"
198.235.24.134 - - [05/Apr/2025:14:53:41 +0800] "\x16\x03\x01\x00\xEE\x01\x00\x00\xEA\x03\x03\xC9\xA1v\x98nu\xAD\xC1\xE2\xFA;\xDB\x03\x86\xD4\xC9\x1A\xC7\xA0*2\xED\x9D\x22-}\x7F\xDC\xCB \xB1U \xCE\xC0>(f\x15\x97\xEAA\xBCp\xEFi\x14\xC3I\x07\xEB>\xBA\xCA\xDB\x0F\x18\xA2\x83W\xE3\x04.FC\x00&\xC0+\xC0/\xC0,\xC00\xCC\xA9\xCC\xA8\xC0\x09\xC0\x13\xC0" 400 157 "-" "-" "-"
47.236.251.77 - - [05/Apr/2025:14:57:44 +0800] "\x04\x01\x00Pg)\xA7\xEA\x00" 400 157 "-" "-" "-"
47.236.251.77 - - [05/Apr/2025:14:57:46 +0800] "\x05\x01\x00" 400 157 "-" "-" "-"
47.236.251.77 - - [05/Apr/2025:14:57:57 +0800] "GET http://passport.baidu.com/ HTTP/1.1" 200 4833 "-" "-" "-"
# 只要access.log日志中13点30分到14点30分时间段的ip,url,状态码信息。
cat access.log | cut -f 4-5,6-9 -d " " | awk -F: '$3 >= 30 && $3 <= 59 && $2 == 13 || $2 == 14 && $3 >= 0 && $3 <= 30'
#解释:
#cat access.log 读取并输出 access.log 文件的内容。
#cut -f 4-5,6-9 -d " " 提取第 4 到第 5 个字段,以及第 6 到第 9 个字段。指定字段分隔符为空格。
#awk -F: '$3 >= 30 && $3 <= 59 && $2 == 13 || $2 == 14 && $3 >= 0 && $3 <= 30' -F::指定输入字段的分隔符为冒号 :
#$3 >= 30 && $3 <= 59 && $2 == 13:筛选第 3 个字段在 30 到 59 之间,并且第 2 个字段等于 13。
#$2 == 14 && $3 >= 0 && $3 <= 30:筛选第 2 个字段等于 14,并且第 3 个字段在 0 到 30 之间。