• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
孙龙 程序员
少时总觉为人易,华年方知立业难
博客园    首页    新随笔    联系   管理    订阅  订阅
linux字符处理命令wc cat grep sed

1)wc:

-c 统计字节数。

-l 统计行数。

1)执行命令wc -c test.txt后,结果如下图所示

 2)执行命令wc -l test.txt后,结果如下图所示:

eg:统计已nologin结尾的有多少行

grep "nologin$" /etc/passwd

grep "nologin$" /etc/passwd |wc -l

 

2)cat

-n 或 --number:由 1 开始对所有输出的行数编号。

-A, --show-all:查看换行符。

我们可以通过命令cat -A test.txt查看换行符,如下图所示:

 

 把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里:

cat -n textfile1 > textfile2

 

清空 /etc/test.txt 文档内容:

cat /dev/null > /etc/test.txt

 

 

3)grep

-----强大的文本搜索工具

常用参数:

 

  • -a 或 --text : 不要忽略二进制的数据。
  • -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
  • -b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
  • -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
  • -c 或 --count : 计算符合样式的列数。
  • -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
  • -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
  • -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
  • -E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
  • -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
  • -F 或 --fixed-regexp : 将样式视为固定字符串的列表。
  • -G 或 --basic-regexp : 将样式视为普通的表示法来使用。
  • -h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
  • -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
  • -i 或 --ignore-case : 忽略字符大小写的差别。
  • -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
  • -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
  • -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
  • -o 或 --only-matching : 只显示匹配PATTERN 部分。
  • -q 或 --quiet或--silent : 不显示任何信息。
  • -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
  • -s 或 --no-messages : 不显示错误信息。
  • -v 或 --invert-match : 显示不包含匹配文本的所有行。
  • -V 或 --version : 显示版本信息。
  • -w 或 --word-regexp : 只显示全字符合的列。
  • -x --line-regexp : 只显示全列符合的列。
  • -y : 此参数的效果和指定"-i"参数相同。

 

1、在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:

grep test *file 
结果:
$ grep test test* #查找前缀有“test”的文件包含“test”字符串的文件 testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行 testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行 testfile_2:Linux test #列出testfile_2 文件中包含test字符的行

 

2、以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:

grep -r update /etc/acpi 

3、反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。

查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:

grep -v test *test*

查找时不区分大小写:

$ grep –i "被查找的字符串" 文件名

 

 

查找包含root或者test001的行 并且显示上下2行记录 -En -C 

[root@serv-test liexin521]# grep -En -C 2 "root|test001" /etc/passwd --color

1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/nologin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10-uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
11:operator:x:11:0:operator:/root:/sbin/nologin
12-games:x:12:100:games:/usr/games:/sbin/nologin
13-gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
--
31-www:x:501:501:www:/home/www:/bin/bash
32-xiongbin:x:502:502::/home/xiongbin:/bin/bash
33:test001:x:0:503::/home/test001:/bin/bash
34-mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
35-smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin

 

 查看配置文件

[root@serv-test home]# grep -vE "^#|^$" /etc/login.defs 
MAIL_DIR    /var/spool/mail
PASS_MAX_DAYS    99999
PASS_MIN_DAYS    0
PASS_MIN_LEN    5
PASS_WARN_AGE    7
UID_MIN              500
UID_MAX            60000
GID_MIN              500
GID_MAX            60000
CREATE_HOME    yes
UMASK           077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512

 

 

 

4)初识awk

1),获取ip

[liexin521@serv-test tmp]$ ifconfig
eth0 Link encap:Ethernet HWaddr 38:D5:47:E0:32:1F
inet addr:192.168.1.252 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::3ad5:47ff:fee0:321f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2192222523 errors:0 dropped:0 overruns:0 frame:0
TX packets:2100350850 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:461065535638 (429.4 GiB) TX bytes:379920341514 (353.8 GiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:2479438641 errors:0 dropped:0 overruns:0 frame:0
TX packets:2479438641 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:249388656796 (232.2 GiB) TX bytes:249388656796 (232.2 GiB)

[liexin521@serv-test tmp]$ ifconfig  |grep "inet " |awk '{print $2}'
addr:192.168.1.252
addr:127.0.0.1
[liexin521@serv-test tmp]$ ifconfig  |grep "inet " |awk '{print $2}'| awk NR==1
addr:192.168.1.252

 

 

5) sed

Linux sed 命令是利用脚本来处理文本文件。

sed 可依照脚本的指令来处理、编辑文本文件。

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

 

-n, --quiet, --silent 取消自动打印模式空间
-e 脚本, --expression=脚本 添加“脚本”到程序的运行列表
-f 脚本文件, --file=脚本文件 添加“脚本文件”到程序的运行列表
--follow-symlinks 直接修改文件时跟随软链接
-i[扩展名], --in-place[=扩展名] 直接修改文件(如果指定扩展名就备份文件)
-l N, --line-length=N 指定“l”命令的换行期望长度
--posix 关闭所有 GNU 扩展
-r, --regexp-extended 在脚本中使用扩展正则表达式
-s, --separate 将输入文件视为各个独立的文件而不是一个长的连续输入
-u, --unbuffered 从输入文件读取最少的数据,更频繁的刷新输出
--help 打印帮助并退出
--version 输出版本信息并退出
-a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
-c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
-d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
-i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
-p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
-s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法
————————————————

1,简单替换:

 

 

 获取ip:

[root@serv-test liexin521]# ifconfig eth0 | sed -n '2p'
          inet addr:192.168.1.252  Bcast:192.168.1.255  Mask:255.255.255.0


[root@serv-test liexin521]# ifconfig eth0 | sed -n '2p' | sed -r 's#(^.*addr:)(.*)(Bcast.*$)# \2#g'
 192.168.1.252

 

修改ip:

[root@serv-test liexin521]# cat -n ./ifcfg-eth0 
     1    DEVICE=eth0
     2    TYPE=Ethernet
     3    BOOTPROTO=static
     4    IPADDR=192.168.1.252
     5    NETMASK=255.255.255.0
     6     GATEWAY=192.168.1.201
     7    ONBOOT=yes
#将第6行ip替换成201
sed -ri '6s#(^.*=)(.*$)#\1192.168.1.201#g' ./ifcfg-eth0

 

 

综合案例:

ifconfig ens32  获取ip

 

 1)grep+awk

 

 2)grep+sed

 

 3)awk

 

本文来自博客园,作者:孙龙-程序员,转载请注明原文链接:https://www.cnblogs.com/sunlong88/p/16360883.html

posted on 2022-06-09 19:23  孙龙-程序员  阅读(371)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3