189 8069 5689

文本处理命令(增删改查文本)-创新互联

一、显示文本

创新互联公司主要从事成都做网站、网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务赤壁,10多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

(一)more命令

1.语法格式

格式:more  [选项]  filename
功能:读取filename中的内容,逐屏往下翻页显示,按h显示帮助,按q退出。

2.选项

-d, --silent display help instead of ringing bell
-f, --logical count logical rather than screen lines
-l, --no-pause suppress pause after form feed
-c, --print-over do not scroll, display text and clean line ends
-p, --clean-print do not scroll, clean screen and display text 显示下一屏之前先清屏
-s, --squeeze squeeze multiple blank lines into one 文件中连续的空白行压缩成一个空白行显示
-u, --plain suppress underlining and bold
-n, --linesthe number of lines per screenful
-same as --lines
+display file beginning from line number
+/display file beginning from pattern match

-h, --help 显示此帮助
-V, --version 显示版本
3.参数

文件名

4.示例

(1)正常用法

more file.txt

显示file.txt的内容

more Test.java file.txt

显示Test.java和file.txt的内容

(2)-s选项

more -s file

连续的空白行压缩成一个空白行显示

(二)less命令

1.语法格式

格式:less  [选项]  filename
功能:依次读取filename中的内容,该命令与more的不同是不仅可以向下翻页,还可以向上翻页,使用上下键、Enter、空格、pageDown、pageUp可以实现前后翻页,按h帮助,按q退出。

2.选项

选项太多了

使用less --help查看

3.参数

文件名

4.示例

(1)正常用法

less Test.java

显示Test.java的内容

(三)cat命令

全称concatenate,串接的意思

1.语法格式
用法:cat [选项]... [文件]...
连接一个或多个<文件>并输出到标准输出。

2.选项

-A, --show-all 等价于 -vET
-b, --number-nonblank 对非空输出行编号,使 -n 失效
-e 等价于 -vE
-E, --show-ends 在每行行末显示 "$"
-n, --number 对输出的所有行编号
-s, --squeeze-blank 不重复输出空行
-t 等价于 -vT
-T, --show-tabs 将 TAB 显示为 ^I
-u (被忽略)
-v, --show-nonprinting 使用 ^ 和 M- 表示法,LFD 和 TAB 字符除外
--help 显示此帮助信息并退出
--version 显示版本信息并退出

3.参数

文件名

-(减号)

4.示例

(1)正常用法
cat Test.java
显示当前目录下Test.java的内容
(2)-n选项

cat -n Test.java
显示当前目录下Test.java的内容,并加上行号

(3)-E, --show-ends 在每行行末显示 "$"

cat -E Test.java
显示当前目录下Test.java的内容,在每行末加上$

(4)-s, --squeeze-blank 不重复输出空行

(5)-v, --show-nonprinting 使用 ^ 和 M- 表示法,LFD 和 TAB 字符除外

(四)od命令

octal dump 逐字节打印,可以用八进制/十六进制打印

1.语法格式

用法:od [选项]... [文件]...
或:od [-abcdfilosx]... [文件] [[+]偏移量[.][b]]
或:od --traditional [选项]... [文件] [[+]偏移量[.][b] [+][标签][.][b]]

以无歧义的表示方式将<文件>输出至标准输出,默认为八进制字节形式。
如果指定了多于一个<文件>,则将它们按照列出的顺序连接起来作为输入。
如果没有指定文件,或者文件为"-",则从标准输入读取。

2.选项

-A, --address-radix=基数 指定文件偏移量的输出格式;这里给出的<基数>
是 [doxn] 其中之一,分别代表十进制、八进制、
十六进制和无基数
--endian={big|little} 按照指定的字节序交换输入字节
-j, --skip-bytes=字节数 处理前先跳过<字节数>个输入字节
-N, --read-bytes=字节数 最多读取<字节数>个输入的字节
-S 字节数, --strings[=字节数] 输出至少包含<字节数>个可打印字符的字符串;
如未指定<字节数>,则默认为 3
-t, --format=类型 选择一个或多个输出格式
-v, --output-duplicates 不使用 "*" 字符代替被省略的行
-w[字节数], --width[=字节数] 每一行输出<字节数>个字节;
如未指定<字节数>,则默认为 32
--traditional 接受以上面第三种格式提供的参数
--help 显示此帮助信息并退出
--version 显示版本信息并退出

传统的格式说明符可以混合使用,不同的格式可以累加:
-a 即 -t a, 输出字符的名称,忽略最高位
-b 即 -t o1,输出八进制字节
-c 即 -t c, 输出可打印字符或者使用反斜杠转义
-d 即 -t u2,输出无符号十进制数,两个字节为一个输出单位
-f 即 -t fF,输出浮点数
-i 即 -t dl,输出十进制整型 (int)
-l 即 -t dL,输出十进制长整型 (long)
-o 即 -t o2,输出八进制数,两个字节为一个输出单位
-s 即 -t d2,输出十进制数,两个字节为一个输出单位
-x 即 -t x2,输出十六进制数,两个字节为一个输出单位

<类型>是由下面一种或多种说明符组成的:
a 字符名称,忽略最高位
c 可打印字符或者使用反斜杠转义
d[大小] 有符号十进制数,每个整数占<大小>个字节
f[大小] 浮点数,每个浮点数占<大小>个字节
o[大小] 八进制数,每个整数占<大小>个字节
u[大小] 无符号十进制数,每个整数占<大小>个字节
x[大小] 十六进制数,每个整数占<大小>个字节

<大小>是一个数字。如果<类型>是 [doux] 之一,<大小>也可以是:
C 代表 sizeof(char)、S 代表 sizeof(short)、I 代表 sizeof(int),
或 L 代表 sizeof(long)。如果<类型>是 f,<大小>也可以是:
F 代表 sizeof(float)、D 代表 sizeof(double),或 L 代表 sizeof(long double)。

在任何类型后面加上 "z" 后缀,将会在每个输出行的末尾显示可打印字符。

如果<字节数>有 "0x" 或 "0X" 前缀,则将其视为十六进制数。
<字节数>可以有乘数后缀:
b 512
KB 1000
K 1024
MB 1000*1000
M 1024*1024
G、T、P、E、Z、Y 以此类推。
也可以使用二进制前缀:KiB=K、MiB=M,以此类推。

3.参数

文件名

-

4.示例

(1)-t选项

下列方式可以以16进制显示一个字符串的编码。

echo abcdABCD | od -t x1

0000000 61 62 63 64 41 42 43 44 0a

0000011

(五)head命令

1.语法格式

用法:head [选项]... [文件]...
将每个<文件>的前 10 行输出到标准输出。
如果指定了多个<文件>,在输出每个文件之前先输出文件名作为头部。

如果没有指定<文件>,或者<文件>为 "-",则从标准输入读取。

2.选项
-c, --bytes=[-]数字 显示每个文件的前<数字>字节内容;
如果数字前附加 "-" 字符,则显示每个文件
除了最后<数字>字节以外的全部内容
-n, --lines=[-]数字 显示每个文件的前<数字>行内容而非前 10 行内容;
如果数字前附加 "-" 字符,则显示每个文件
除了最后<数字>行以外的全部内容
-q, --quiet, --silent 不打印文件名作为头部
-v, --verbose 总是打印文件名作为头部
-z, --zero-terminated 以 NUL 空字符而非换行符作为行分隔符
--help 显示此帮助信息并退出
--version 显示版本信息并退出

3.参数

文件名

-

4.示例

(1)正常用法

head test

显示test的前10行

(2)-n选项

head -3 Test.java

显示Test.java的前3行

(六)tail命令

1.语法格式

用法:tail [选项]... [文件]...
将每个<文件>的最后 10 行输出到标准输出。
如果指定了多个<文件>,程序会在每个文件的开头添加文件名作为头部。

如果没有指定<文件>,或者<文件>为 "-",则从标准输入读取。
2.选项

-c, --bytes=[+]数字 输出最后<数字>个字节;或者使用 -c +数字 以输出
每个文件第<数字>个字节起的全部内容
-f, --follow[={name|descriptor}]
随文件增长即时输出新增数据;
若未指定选项参数,则默认使用 "descriptor"
-F 同 --follow=name --retry
-n, --lines=[+]数字 输出最后<数字>行,而不是默认的最后 10 行;或者
使用 -n +数字 输出每个文件第<数字>行起的全部内容
--max-unchanged-stats=N
和 --follow=name 同时使用时, 如果一个<文件>在 N 次
(默认为 5 次)迭代后没有改变大小,则重新打开它,
以确认它是否已被删除或重命名(对于轮转 (rotated)
日志文件而言,这种情况很常见);
如果内核支持 inotify,则此选项通常没有用处
--pid=PID 和 -f 同时使用时,在进程号为 PID 的进程结束后终止执行
-q, --quiet, --silent 不输出含有文件名的头
--retry 即使目标文件无法访问,仍然不断尝试打开
-s, --sleep-interval=N 和 -f 同时使用时,在两次迭代之间睡眠约 N 秒
(默认 1.0 秒)
内核支持 inotify 且使用了 --pid=P 时,每 N 秒
至少检查一次进程 P
-v, --verbose 总是输出含有文件名的头
-z, --zero-terminated 以 NUL 空字符而非换行符作为行分隔符
--help 显示此帮助信息并退出
3.参数

文件名

-

4.示例

(1)正常用法

tail test

显示test后10行

(2)-n选项

tail -n3 Test.java

tail -3 Test.java

显示Test.java的最后3行

(七)tee命令

1.语法格式

用法:tee [选项]... [文件]...
将标准输入复制到每个<文件>,并同时输出到标准输出。

2.选项

-a, --append 追加到<文件>,而不是覆盖
-i, --ignore-interrupts 忽略中断信号
-p 写入到非管道的对象出错时,输出诊断信息
--output-error[=模式] 设置写入出错时的行为。见下面<模式>部分
--help 显示此帮助信息并退出
--version 显示版本信息并退出

<模式>决定了写入到输出对象时出错后的行为:
warn 写入到任一输出对象时出错,则输出诊断信息
warn-nopipe 写入到任一非管道的输出对象时出错,则输出诊断信息
exit 写入到任一输出对象时出错,则退出
exit-nopipe 写入到任一非管道的输出对象时出错,则退出
-p 选项的默认<模式>是 "warn-nopipe"。
未指定 --output-error 选项时,默认的操作是写入到管道出错时立刻退出,
写入到非管道对象出错时输出诊断信息。

3.参数

文件名

4.示例

(1)正常用法

echo 'hello world' | tee xx.txt

将hello world打印终端中,同时保存到xx.txt文件中。

(八)uniq命令

筛选文件中的重复行

1.语法格式

用法:uniq [选项]... [输入文件 [输出文件]]
从<输入文件>(或标准输入)中过滤内容相同的相邻的行,
并写到<输出文件>(或标准输出)。

不带选项时,内容相同的行将仅输出一次。

2.选项

长选项的必选参数对于短选项也是必选的。
-c, --count 在每行之前加上该行的重复次数作为前缀
-d, --repeated 只输出重复的行,每组重复的行输出一次
-D 输出所有重复的行
--all-repeated[=方法] 类似 -D,但支持在每组重复的行之间添加一行空行;
方法={none(默认),prepend,separate}
-f, --skip-fields=N 不要比较前 N 个字段
--group[=方法] 分组输出所有项目,每组之间用空行分隔;
方法={separate(默认),prepend,append,both}
-i, --ignore-case 比较时忽略大小写
-s, --skip-chars=N 不要比较前 N 个字符
-u, --unique 只输出不重复(内容唯一)的行
-z, --zero-terminated 以 NUL 空字符而非换行符作为行分隔符
-w, --check-chars=N 每行最多比较 N 个字符
--help 显示此帮助信息并退出
--version 显示版本信息并退出

字段指的是空白字符(通常是空格和/或制表符)的序列,后跟非空白字符的序列。
程序将先跳过字段 (--skip-fields),后跳过字符 (--skip-chars)。

注意:除非重复的行是相邻的,否则 "uniq" 将无法检测到它们。
您可能需要事先对输入进行排序,或使用 "sort -u" 而无需接着使用 "uniq"。

3.参数

输入文件

输出文件

4.示例

(1)正常使用

uniq test

二、增加文本

使用重定向>>追加文本

也可以使用sed命令实现插入文本

三、删除文本

一般使用sed命令实现删除文本

四、查找文本

(一)grep命令

grep

五、替换文本

(一)tr命令

tr string1 string2: 将string1中包含的字符,替换为string2中对应的字符,然后再拷贝到标准输出。

1.语法格式

用法:tr [选项]... 字符串1 [字符串2]
从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。
<字符串1>和<字符串2>用于指定字符数组<数组1>和<数组2>,这两个
<数组>将控制程序的行为。

2.选项

-c, -C, --complement 使用<数组1>的补集
-d, --delete 删除<数组1>中的字符,不进行替换
-s, --squeeze-repeats 将最后一个<数组>中任何一个字符多次重复
形成的序列,缩减为仅有一个这个字符
-t, --truncate-set1 先将<数组1>截断为和<数组2>长度相同
--help 显示此帮助信息并退出
--version 显示版本信息并退出

3.参数

指定的<数组>是字符串。大多数字符串仅表示该字符串本身。可解释的序列如下:

\NNN 值为 NNN(1 至 3 位八进制数)的字符
\\ 反斜杠
响铃字符 BEL
\b 退格
\f 换页
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
字符1-字符2 从<字符1>到<字符2>的所有字符,按升序排列
[字符*] 在<数组2>中不断重复<字符>,直到<数组2>的长度等于<数组1>
[字符*个数]<个数>个<字符>,若<个数>以 0 开头,则视为八进制数
[:alnum:] 所有的字母和数字
[:alpha:] 所有的字母
[:blank:] 所有的水平空白字符
[:cntrl:] 所有的控制字符
[:digit:] 所有的数字
[:graph:] 所有的可打印字符,不包括空格
[:lower:] 所有的小写字母
[:print:] 所有的可打印字符,包括空格
[:punct:] 所有的标点符号
[:space:] 所有的水平或垂直空白字符
[:upper:] 所有的大写字母
[:xdigit:] 所有的十六进制数字
[=字符=] 所有和<字符>等价的字符

仅在同时指定了<字符串1>和<字符串2>,且没有使用 -d 选项时才会进行替换。
仅在替换时才可以使用 -t 选项。如果需要,将重复<数组2>的最后一个字符,
使<数组2>和<数组1>等长。<数组2>中多余的字符将被忽略。字符类展开的
顺序是未指定的;在进行替换操作时,可以成对使用 [:lower:] 和 [:upper:],
以表示大小写转换。缩减操作将在替换或删除完成之后进行。

4.示例

(1)正常用法

echo abcdABCD | tr aBc AbC

# 输出结果如下:

AbCdAbCD

(2)用 [ ]指定一个集合

# 将小写字母转换为大写字母

echo abcdABCD | tr '[a-z]'  '[A-Z]'

# 输出结果如下:

ABCDABCD

(3)用 \加上三个八进制数字(类似C语言)表示一个字符

# 将%替换为换行符(八进制012),注意不要漏掉必须的单引号

cat file1 | tr % '\012'

(二)sed命令

sed

(三)awk命令

awk

六、文本统计

(一)wc命令

1.语法格式

用法:wc [选项]... [文件]...
或:wc [选项]... --files0-from=F
打印每个<文件>的换行符、单词和字节计数;如果指定了多个<文件>,
则还会打印一个 "总计" 行。此处的 "单词" 是指由空白字符分隔的
长度大于零的字符序列。

如果没有指定<文件>,或者<文件>为 "-",则从标准输入读取。
2.选项

可使用以下选项选择输出哪些种类的计数。输出总是遵循以下顺序:
换行符数、单词数、字符数、字节数、最长行的长度。
-c, --bytes 输出字节数
-m, --chars 输出字符数
-l, --lines 输出换行符数
--files0-from=F 从文件 F 中读取以 NUL 空字符分隔的文件名作为
输入文件的名称;
如果 F 是 "-",则从标准输入读取文件名
-L, --max-line-length 输出最长行的长度
-w, --words 输出单词数
--help 显示此帮助信息并退出
--version 显示版本信息并退出

3.参数

文件名

4.示例

(1)正常用法

wc Test.java
输出Test.java的换行符、单词和字节计数

(2)-l选项,只显示行数

ps -ef | wc -l

显示系统有多少个进程

who | wc -l

显示当前有多少个用户登陆

(3)-w, --words 输出单词数
wc -w Test.java
统计Test.java的单词数

(4)-m, --chars 输出字符数

(5)-c, --bytes 输出字节数

七、文本排序

(一)sort命令

1.语法格式

用法:sort [选项]... [文件]...
或:sort [选项]... --files0-from=F
连接所有<文件>,然后排序,并将结果写到标准输出。

如果没有指定<文件>,或者<文件>为 "-",则从标准输入读取。

2.选项

长选项的必选参数对于短选项也是必选的。
排序选项:

-b, --ignore-leading-blanks 忽略前导的空白字符
-d, --dictionary-order 只考虑空白字符、字母和数字
-f, --ignore-case 忽略大小写
-g, --general-numeric-sort 对一般化的数字进行排序
-i, --ignore-nonprinting 只考虑可打印字符
-M, --month-sort 对月份进行排序:(未知)< "1月"< ...< "12月"
LC_ALL=C 时:(未知)< "JAN"< ...< "DEC"
-h, --human-numeric-sort 对可读性较好的数字(例如:2K 1G)进行排序
-n, --numeric-sort 对数字进行排序
-R, --random-sort 随机排序,但是相等的键会排序到一起。参见 shuf(1)
--random-source=文件 从<文件>中获得随机字节
-r, --reverse 逆序输出排序结果
--sort=关键字 按照<关键字>指定的方式排序:
general-numeric 同 -g、human-numeric 同 -h、
month 同 -M、numeric 同 -n、random 同 -R、
version 同 -V
-V, --version-sort 对文本中的数字(或版本号)进行自然排序

3.参数

文件名

4.示例

(1)-n:  按照数值大小排序,而不是按照字符串比较规则。

比如:123与67:

  • 如果按照字符串排序的话,67比123大;

  • 如果按照数字值排序的话,123比67大

八、路径名处理

(一)basename命令
去掉路径名的目录部分
1.语法格式
用法:basename 名称 [后缀]
或:basename 选项... 名称...
去掉前导的目录部分后打印<名称>。
如果指定的话,还会去掉末尾的<后缀>。
2.选项
长选项的必选参数对于短选项也是必选的。
-a, --multiple 支持接受多个参数,并把每个参数都视作给定的<名称>
-s, --suffix=后缀 移除末尾的<后缀>;隐含启用 -a 选项
-z, --zero 以 NUL 空字符而非换行符来结束每一个输出行
--help 显示此帮助信息并退出
--version 显示版本信息并退出

3.参数
文件路径名
文件后缀

4.示例用法
(1)正常用法
basename /usr/bin/sort

输出:

sort
basename /home/mikel/bin/bvurns.sh

输出:

bvurns.sh

(2)带后缀参数

basename /home/mikel/bin/bvurns.sh .sh

输出:

bvurns

(3)-s选项

basename -s .h include/stdio.h

输出:

stdio

(4)-a选项
basename -a any/str1 any/str2

输出:
str1

str2

(二)dirname命令
只保留目录部分
1.语法格式
用法:dirname [选项] 名称...
去掉<名称>中最后一个非 "/" 部分,以及末尾的 "/",然后输出;
如果名称中不包含 "/",则输出 "."(表示当前目录)。

2.选项
-z, --zero 以 NUL 空字符而非换行符结束每个输出行
--help 显示此帮助信息并退出
--version 显示版本信息并退出
3.参数
路径名
4.示例用法

(1)正常用法
dirname /usr/bin/

输出:

/usr

dirname dir1/str dir2/str

输出:

dir1

dir2

dirname stdio.h

输出:
.

(三)综合运用举例
把大小大于100000字节的文件分割成多个小文件,然后把大文件名加上huge.前缀。(假设文件名中没有空格)

1.第一种写法
for path in `find /home/you -type f -size +100000c -print`; do
cd `dirname $path` || exit
filename=`basename $path`
split $filename $filename.
mv -i $filename huge.$filename
done

2.第二种写法

find /home/you -type f -size +100000c -print | while read path; do

cd `dirname $path` || exit
filename=`basename $path`
split $filename $filename.
mv -i $filename huge.$filename
done

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站题目:文本处理命令(增删改查文本)-创新互联
URL地址:http://cdxtjz.cn/article/pochd.html

其他资讯