文本处理
格式化输出
格式化字符:
【示例】:使用printf进行换行
printf "%s\n" 1 2 3 4
输出结果:
1
2
3
4
【示例】:使用printf进行输出小数
printf "%.2f\n" 1 2 3 4
输出结果:
1.00
2.00
3.00
4.00
【示例】:将字符格式化输出
string="姓名 性别 年龄 体重 xiaoA 男 18 120 xiaoB 女 18 100" #等号前后没有空格
printf "% -10s % -10s % -4s % -4s \n" $string # 注意$与string之间不要有空格
输出:
姓名 性别 年龄 体重
xiaoA 男 18 120
xiaoB 女 18 100
sed命令
sed是一个很好的文本处理工具,其本身是一个管道命令,主要是以行为单位进行文本文档的处理,可以将数据行进行替换、删除、新增、选取等特定工作。sed常用选项及功能如下所示:
【示例】:使用sed命令删除文件select1.sh第一行
文件内容:
#!/bin/bash
echo "what is your favorite os?"
select var in "linux" "Windows" "others"
do
case $var in
linux)
echo "you selected is $var"
;;
Windows)
echo "you selected is $var"
;;
others)
echo "you selected is $var"
;;
*)
echo input error
break
;;
esac
done
sed '1d' select1.sh
# 可以看到第一行内容#!/bin/bash被删除了
echo "what is your favorite os?"
select var in "linux" "Windows" "others"
do
case $var in
linux)
echo "you selected is $var"
;;
Windows)
echo "you selected is $var"
;;
others)
echo "you selected is $var"
;;
*)
echo input error
break
;;
esac
done
【示例】:使用sed命令删除文件select1.sh第一行到第三行
sed '1,3d' select1.sh
# 可以看到1--3行被删除了
do
case $var in
linux)
echo "you selected is $var"
;;
Windows)
echo "you selected is $var"
;;
others)
echo "you selected is $var"
;;
*)
echo input error
break
;;
esac
done
【示例】:使用sed命令查询文件select1.sh中others所在行
sed -n '/others/p' select1.sh
输出:
select var in "linux" "Windows" "others"
others)
【示例】:使用sed命令查询文件select1.sh中others替换成sed_others
sed -n '/others/p' select1.sh | sed 's/others/sed_others/g' #s通过正则表达式进行替换
输出:
select var in "linux" "Windows" "sed_others"
sed_others)
awk命令
作为一款文本处理工具,awk被设计用于数据流,其不仅能够对行进行操作,还可以对列进行操作。awk命令有许多内建的功能,比如数组、函数等,具有很大的灵活性。
语法:
awk 'BEGIN { command } { command1 } END { command2 }' file
command是脚本开始执行时执行的命令
command1为脚本执行过程中执行的命令
command2为脚本执行结束时执行的命令
File是需要被处理的文件名称
【示例】:使用awk命令输出/etc/passwd的账户人数
awk '{ count++;print $0; } END { print "user count is",count}' /etc/passwd
输出:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
......
ftp:x:125:129:ftp daemon,,,:/srv/ftp:/usr/sbin/nologin
user count is 48
文本内容比较
diff命令能够对两个文件进行详细的对比,并将差异结果进行重点标记,输出到文件中。输出到的文件成为被修补文件(patch file),其中包含了修改过的、添加、删除的行及行号,用户可以通过修补文件对源文件进行更改。
语法:
diff ver1 ver2
ver1和ver2是要对比的两个文件,对比结果会输出到终端中,也可以采用重定向的方式将输出保存到任意位置
【示例】:比较ver1与ver2的不同
ls -l > ver1 #使用重定向创建两个文件,内容为当前目录的文件及属性
ls -l > ver2
diff ver1 ver2 # 使用diff命令查看文件内容不同的地方
输出:
1c1 #第1个1代表第一个文件中的第1行;c代表change,即改变;第2个1代表第二个文件的第1行
< 总用量 60 # <符号代表第一个文件
--- # 上边是第一个文件,下边是第二个文件
> 总用量 64
16c16,17
< -rw-rw-r-- 1 xing xing 0 8月 27 12:08 ver1
---
> -rw-rw-r-- 1 xing xing 823 8月 27 12:08 ver1
> -rw-rw-r-- 1 xing xing 0 8月 27 12:08 ver2
over!!!