linux之字符处理

2022-11-14 17:14:48 浏览数 (1)

linux之字符处理

管道

linux中存在着管道,它是一个固定大小的缓冲区,缓冲区大小通常为1页,也就是4K字节。

管道是一个非常频繁的通信机制,利用符号“|”来连接进程,管道表现为输入输出重定向的一种方法,可以把一个命令的输出内容当作下一个命令的输入内容。

例如:我们将ls-l/etc/init.d的命令输出当作more命令的输入

代码语言:javascript复制
swz@swz-debian:~$ ls -l /etc/init.d | more
总用量 180
-rwxr-xr-x 1 root root 2269 11月 22  2018 acpid
-rwxr-xr-x 1 root root 5336 3月  30  2019 alsa-utils
-rwxr-xr-x 1 root root 2948 12月  6  2021 bluetooth
-rwxr-xr-x 1 root root 3059 10月 11  2019 cron
-rwxr-xr-x 1 root root  937 8月  26  2019 cryptdisks
-rwxr-xr-x 1 root root  896 8月  26  2019 cryptdisks-early
-rwxr-xr-x 1 root root 2804 4月   4  2021 cups
-rwxr-xr-x 1 root root 2813 7月   6  2020 dbus
-rwxr-xr-x 1 root root 1399 9月  22  2019 gdomap
-rwxr-xr-x 1 root root 3809 1月  10  2019 hwclock.sh
-rwxr-xr-x 1 root root 3566 11月  2  2021 ipsec
-rwxr-xr-x 1 root root 2824 11月 25  2021 ipwatchd
-rwxr-xr-x 1 root root 2044 2月  10  2019 kmod
-rwxr-xr-x 1 root root 2168 8月   3  2019 laptop-mode
-rwxr-xr-x 1 root root 2610 12月  6  2021 lightdm
-rwxr-xr-x 1 root root  695 6月  21  2019 lvm2
-rwxr-xr-x 1 root root  586 6月  21  2019 lvm2-lvmpolld
-rwxr-xr-x 1 root root 2653 1月  16  2019 mdadm
-rwxr-xr-x 1 root root 1249 1月  16  2019 mdadm-waitidle
-rwxr-xr-x 1 root root 4445 8月  25  2018 networking
-rwxr-xr-x 1 root root 1942 11月 16  2021 network-manager
-rwxr-xr-x 1 root root 1938 10月 20  2021 nmbd
-rwxr-xr-x 1 root root 1846 10月  9  2019 open-vm-tools
-rwxr-xr-x 1 root root 9138 9月   1  2020 openvpn
-rwxr-xr-x 1 root root 1366 5月  28  2020 plymouth
-rwxr-xr-x 1 root root  752 5月  28  2020 plymouth-log
-rwxr-xr-x 1 root root  612 2月  21  2020 pppd-dns
-rwxr-xr-x 1 root root  924 5月  31  2018 procps
lrwxrwxrwx 1 root root   12 2月  15  2019 rc -> /lib/init/rc
lrwxrwxrwx 1 root root   13 2月  15  2019 rcS -> /lib/init/rcS
-rw-r--r-- 1 root root 2427 10月 26  2018 README
-rwxr-xr-x 1 root root 4417 3月  15  2019 rsync
-rwxr-xr-x 1 root root 2864 1月  20  2021 rsyslog
-rwxr-xr-x 1 root root 2263 10月 20  2021 samba-ad-dc
-rwxr-xr-x 1 root root 3088 12月 21  2020 smartmontools
-rwxr-xr-x 1 root root 2065 10月 20  2021 smbd
-rwxr-xr-x 1 root root 3939 6月  22  2021 ssh
-rwxr-xr-x 1 root root 1030 3月  31  2021 sudo
-rwxr-xr-x 1 root root 6872 8月   9  2021 udev
-rwxr-xr-x 1 root root 2757 11月 23  2016 x11-common
--More--

使用grep搜索文本

grep是linux下的基于行的文本搜索工具,使用其工具时,匹配到相关信息时便会打印在其所在的行。

常用参数:-i 不区分大写(ignore);-c 统计包括的匹配的行数;-n 输出行号 ;-v 反向匹配

代码语言:javascript复制
swz@swz-debian:~/swz$ cat swz.txt 
swz
hello,what's is your name?
ok,i'm swz.
my name is swz,i come from china.
how old are you?
my age is 24.
do you want to know more thing?
no,let's come here.
swz@swz-debian:~/swz$ grep "name" swz.txt 
hello,what's is your name?
my name is swz,i come from china.

可以用管道进行上述命令的改写,把cat显示的内容输出到grep上。

代码语言:javascript复制
swz@swz-debian:~/swz$ cat swz.txt | grep -v "name"
swz
ok,i'm swz.
how old are you?
my age is 24.
do you want to know more thing?
no,let's come here.

使用sort排序

对无序的数据进行排序需要用到sort命令来进行排序。

常用参数如下:-n 采取数字排序;-t 指定分隔符;-k 指定第几列;-r 反向排序。

代码语言:javascript复制
swz@swz-debian:~/swz$ cat sort.txt 
c:11
b:5
a:6
d:8
f:-9
e:7
swz@swz-debian:~/swz$ cat sort.txt | sort -n
a:6
b:5
c:11
d:8
e:7
f:-9

使用uniq删除重复内容

当文件中有多行完全相同的内容,我们可以使用unip命令来删除文件重复的内容,也可以统计出文章相同的行的次数。

代码语言:javascript复制
swz@swz-debian:~/swz$ cat uniq.txt 
swz
hello,what's is your name?
ok,i'm swz.
my name is swz,i come from china.
how old are you?
my age is 24.
do you want to know more thing?
no,let's come here.
hello,what's is your name?
ok,i'm swz.
ok,i'm swz.
swz@swz-debian:~/swz$ cat uniq.txt |sort | uniq
do you want to know more thing?
hello,what's is your name?
how old are you?
my age is 24.
my name is swz,i come from china.
no,let's come here.
ok,i'm swz.
swz

使用cut截取文本

cut截取文本,处理的是一行文本,可以选取出用户所需要的部分。

使用tr做文本转换

tr命令比较简单,主要用于文本转换或者删除。

tr "原先字符" "转换的字符" 转换字符 tr -d "字符" 删除字符

代码语言:javascript复制
swz@swz-debian:~/swz$ cat 123.txt 
swz
hello,what's is your name?
ok,i'm swz.
my name is swz,i come from china.
how old are you?
my age is 24.
do you want to know more thing?
no,let's come here.
swz@swz-debian:~/swz$ cat 123.txt | tr "swz" "shuwenzhao"
shu
hello,hhat's is your name?
ok,i'm shu.
my name is shu,i come from china.
hoh old are you?
my age is 24.
do you hant to knoh more thing?
no,let's come here.
swz@swz-debian:~/swz$ cat 123.txt | tr -d "24"
swz
hello,what's is your name?
ok,i'm swz.
my name is swz,i come from china.
how old are you?
my age is .
do you want to know more thing?
no,let's come here.

使用paste做文本合并

可以paste命令将两个文件按照对应的的格式进行合并。利用-d 字符指定分分割的字符

代码语言:javascript复制
swz@swz-debian:~/swz$ paste -d : a.txt b.txt 
你好 :hello
中国人:chinese people
共军:i'm a chinese
我是中国共产党:i can speak chinese
我的家乡是湖北的:my hometown is hubei province

0 人点赞