linux的文本工具操作

linux的文本工具操作

一、输入输出重定向

####1、输出重定向:

ss -nltp > 1.txt #替换
ss -nltp >> 1.txt # 追加

####2、输入重定向:

wc -l 1.txt # output:行数 文件名
wc -l < 1.txt # output:行数
wc < 1.txt > 2.txt # 同时替换输入输出,从1.txt文件中读取,结果集输出到2.txt文件中,输入和输出不可以是同一个文件
wc 1.txt > 2.txt # 同时替换输入输出,从1.txt文件中读取,结果集包含源文件名
echo 'aaaa' > /dev/null #输出丢弃
echo 'bbbb' > /dev/null 2>&1 #屏蔽stdout和stderr,0是标准输入STDIN,1是标准输出STDOUT,2是标准错误输出
sh 1.txt > 3.txt 2>&1 #将stdout和stderr合并后重定向(覆盖)到file
sh 1.txt >> 3.txt 2>&1 #将stdout和stderr合并后重定向(追加)到file
3、example
#!/bin/bash
# author:761071654@qq.com

cat << EOF
您好,
再见。
www.baidu,com
EOF 

二、awk文本查找

1、行匹配(语句只能用单引号,但是里面的逻辑判断可以用双引号进行比较)
netstat -nltp|awk '{print $4,$5,$6}' #以空格或者Tab为分割,打印4,5,6列
netstat -nltp|awk -va=1 '{print $2+a,$5,$6}' # 设置变量
ss -nltp|awk -F: '{print $2,$3}' # 指定分隔符
ss -nltp|awk -F: '$2>1 {print $2,$3}' # awk脚本
2、原料

4.txt

    Marry 2143 78 84 77
    Jack  2321 66 78 45
    Tom   2122 48 77 71
    Mike  2537 87 97 95
    Bob   2415 40 57 62
A、用例
awk '/Tom/' 4.txt # 输出包含Tom的行
awk 'BEGIN{IGNORECASE=1} /ja/' 4.txt # 忽略大小写
awk '$2 ~ /23/ {print $2,$4}' 4.txt # 输出第二列包含23,并打印第二列和第四列
awk '$1 !~ /ik/ {print $1,$2}' 4.txt # 模位取反
awk '$1 ! /ik/ {print $1,$2}' 4.txt # 模位取反
3、awk脚本
#!/bin/awk -f
#运行前
BEGIN {
        math = 0
        english = 0
        computer = 0

        printf "姓名    编号    数学    英语    微机    小计\n"
        printf "--------------------------------------------\n"

}
#运行中
{
        math+=$3
        english+=$4
        computer+=$5
        printf "%-6s %-6s %4d %8d %8d %8d\n",$1,$2,$3,$4,$5,$3+$4+$5
}
#运行后
END {
        printf "--------------------------------------------\n"
        printf "   小计:%10d %8d %8d \n",math,english,computer
        printf "   总计:%10.2f %8.2f %8.2f \n",math/NR,english/NR,computer/NR # NR行号,从1开始
                
}
A、运行
awk -f 5.awk 4.txt
4、其他的一些运用
awk 'BEGIN {print "hello,world"}'
ls -l *.txt |awk '{sum+=$5} END {print sum}' # 计算文件大小
awk 'length<100' 2.txt # 找出文件中长度小于100的行

三、seq序列化输出

以指定增量从首数开始打印数字到尾数
-f 使用printf样式的浮点格式
-s 使用指定分隔符分割数字
-w 在列前添加0,使得宽度相同,即默认自动补位
–help
-version
seq [尾数]
seq [首数 尾数]
seq [首数 增量 尾数]

seq -s '#' 5 #1#2#3#4#5
seq -s ' ' 1 2 10 #输出10之内的奇数
seq 1 4 | xargs -I{} echo {} > 3.txt # 间隔输出,且写入文件,默认分隔符为\n
seq -w 1 10 # 默认补位操作,前置不足补零
seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%d*%d=%d%s",i,NR,i*NR,i==NR?"\n":"\t")}' # 九九乘法表
# -v=用户自定义变量 RS=记录分隔符,默认换行

四、sed

 利用脚本来处理文件,编辑一个或多个文件,简化对文件的反复操作,编写转换程序.
sed [-hnv][-e script][-f<script>][文本文件]
- 参数说明:
 - -e<script>或--explession=<script>以选项中指定的脚本来处理输入的文本文件
 - -f<script文件>或-file=<script文件>以选项中指定的脚本文件来处理输入的文本文件
 - -h帮助信息
 - -n或--quit或--slient仅显示script处理后的脚本
 - -V或--version显示版本信息
- 动作说明
 - a:新增,a的后面可以接字串,而这些子串会在下一行出现;
 - c:取代,c的后面可以接字串,这些字串可以取代n1,n2之间的行;
 - d:删除,一般d后面不接任何参数
 - i:插入,i的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
 - p:打印,亦或将某个选择的数据印出,通常p会与参数sed -n 一起使用
 - s:取代,可以直接进行工作取代,通常s需要配合正则表达式使用,例如1,20s/old/new/g

1、实例
A、原料5.txt
Hello,LINUX!
Linux is a free unix-type operating system.
this is linux testfile.
Linux test.
B、使用
i、终端输出
sed -e 4a\newline 5.txt # 在第四行的后面追加一行,并将结果输出到标准输出
sed -e 3 a \newline\newline2 5.txt #在第三行后面追加了两行
sed -e '3a\newline\newline2\n' 5.txt #第三行后面追加两行字串,一行空行
sed -e '1a\ ' 5.txt # 第一行后面加空行
sed '4 a \\' 5.txt # 第四行下面插入一个完全为空的行
sed '4 a \\n' 5.txt # 第四行下面插入两个完全为空的行
sed '4 a \\n\n' 5.txt # 第四行下面插入三个完全为空的行
nl /etc/passwd # 列印行号输出
nl /etc/passwd | sed '2,5d' # 内容列印行号输出,并删除2行~5行
nl /etc/passwd | sed '2d' # 只删除2行
nl /etc/passwd | sed '6,$d' 删除6行~最后一行
nl /etc/passwd | sed '2a drink tea' #在第二行下面追加字串
nl /etc/passwd | sed '2i drink tea' #在第二行上面插入字串
nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer?' # 第二行下面追加多行
nl /etc/passwd | sed '2,5c 大家好,我是法外狂徒张三' # 将第二行~第五行替换成字串
nl /etc/passwd | sed '1,3p' # 仅列出1~3行
nl /etc/passwd | sed '/root/p' # 搜索有关root关键词的行,如果找到,除了输出匹配行,还输出所有行
nl /etc/passwd | sed -n '/root/p' # 输出字包含模版的行
nl /etc/passwd | sed '/root/d' # 删除所有包含root的行,其他行输出
nl /etc/passwd | sed -n '/root/{s/bash/张三警告/;p;q}' # 找到root对应的行,执行后面花括号中的一组命令,这里把'bash'替换成'张三警告'并输出
/sbin/ifconfig eth0 |grep 'inet' | sed 's/^.*inet//g' # 查看网卡信息,筛选出包含inet的行,并将inet替换为空输出
/sbin/ifconfig eth0 | grep 'netmask' | sed 's/^.*inet//g' | sed 's/netmask.*$//g' # 筛选出ipv4地址
nl /etc/passwd | sed -e '3,$d' -e 's/bash/基础/' # 删除第三行~末尾的数据,并把base替换成基础
ii、文件修改
sed -i 's/\.$/\?/g' 5.txt 每一行结尾为.的换成?
sed -i '$a # 这就是张三' 5.txt # 直接在最后一行追加 '# 这就是张三',由于$代表的是最后一行,而a代表的动作是新增,因此该文件最后追加字串。
iii.linux的进程
Ossim接口阻塞的问题
lsof -i:40011
supervisorctl restart api
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值