邢栋博客

邢栋博客,Action博客,记录工作和生活中的点点滴滴

linux中awk命令的简单介绍和使用

1.字段以:分隔,打印第一列
awk -F":" '{print $1}' /etc/passwd

2.字段以:分隔,打印第一列和第三列
awk -F":" '{print $1 $3}' /etc/passwd  
awk -F":" '{print $1":"$3}' /etc/passwd

3.文件形式的执行
vim test.awk 写入
BEGIN {FS=":"}
{print $1}

awk -f test.awk /etc/passwd

4.普通过滤代码块
字段以:分隔,输出 以a开头的第一列数数据
awk  'BEGIN{FS=":"}  /^a/{print $1}'  /etc/passwd  

字段以:分隔,输出第一列为root的一行数据
awk  'BEGIN{FS=":"}  $1=="root"{print $0}'  /etc/passwd 

字段以:分隔,输出第七列为nologin的第一列数数据
awk  'BEGIN{FS=":"}  $7 ~ "nologin"{print $1}'  /etc/passwd

字段以:分隔,输出不包含nologin 的第一列数数据
awk  'BEGIN{FS=":"}  !/nologin/{print $1}'  /etc/passwd


5.字段分隔符(FS)
FS="\t+"   一个或者多个TAB分隔
FS="[[:space:]+]"  一个或者多个空白分隔 ,默认的
FS="(foo|:)"  以foo或者:分隔
 
 
6.字段数量(NF)
NF: number of fileds 字段数量,通常只读
NF==3{print "字段为3的行:" $0}
第二列之后的数据

  if(NF>2){
    print $1 $2 $3
  }
}
 
7.记录数量(NR)
NR: number of records 记录(行)数量,当前awk遍历过的函数,动态变化
NR==3{print "第三行"}
#跳过前10行

  if(NR>10){
    print $0
  }
}
 
8.FS和RS例子
my.txt
路人甲
电话:110
手机:138110

路人乙
电话:120
手机:138120
 
awk 'BEGIN{FS="\n";RS=""} {print $1"\t"$2"\t"$3}' my.txt 
说明: FS="/n" 每一列以\n(换行)来分隔, RS=""每一行以空格来分隔

结果如下
路人甲 电话:110 手机:138110

路人乙 电话:120 手机:138120


9.OFS和ORS
OFS:字段输出分隔符,默认是" "
ORS:记录输出分隔符,默认为"\n"

my.txt
路人甲
电话:110
手机:138110

路人乙
电话:120
手机:138120
 
awk 'BEGIN{FS="\n";RS="";OFS="\t";ORS="\n"} {print $1,$2,$3}' my.txt
说明: 
  FS="/n" 每一列以\n(换行)来分隔, RS=""每一行以 【空行】 来分隔
  OFS="/t" 每一列输出用 \t 来分隔, ORS=""每一行以 \n换行 来分隔

结果如下
路人甲 电话:110 手机:138110
路人乙 电话:120 手机:138120

10.循环语句
my.txt
路人甲
电话:110
手机:138110

路人乙
电话:120
手机:138120
QQ:123456
 
awk 'BEGIN{FS="\n";RS="";ORS=""} {for(x=1;x<=NF;x++){print $x"\t"}print "\n"}' my.txt

结果如下
路人甲 电话:110 手机:138110
路人乙 电话:120 手机:138120    QQ:123456

linux中sed命令的几个简单事例


删除文件中1-10行的数据
sed -e '1,10d' ./myfile.txt 

删除文件中以#开头的行,即删除注释
sed -e '/^#/d' ./myfile.txt 

将每行第一次出现的xingdong替换成action
sed -e 's/xingdong/action/' ./myfile.txt

将每行所有的xingdong替换成action
sed -e 's/xingdong/actio/g' ./myfile.txt


把结果存储到文件
sed -e 's/xingdong/actio/g' ./myfile.txt > ./newfile.txt 
或者

sed -i 's/xingdong/actio/g' ./myfile.txt 


使用sed--格式

命令行格式
sed [options] 'command' file(s)
options  -e;-n
command 行定位(正则) + sed命令(操作)

命令行格式举例
1. sed -n '/root/p'
2. sed -e '10,20d' -e 's/false/true/g'

基本操作命令
1. -p 打印相关的行 需要和 -n 配合  sed -n 'p' /etc/passwd
2. -a(新增行) /i(插入行)   新增是在某行之后,插入是在之前
   -c(替代行)
   -d(删除行)
   
nl /etc/passwd | sed '1,5i===' //在1-5行之前插入=== 
nl /etc/passwd | sed '5i==='  //在5行之前插入===
sed '/^$/d' dt.php  //去除空行

3. -s(行首个字符替换) : 分隔符/,# 等
   -g(全局替换) 
sed -e 's/xingdong/actio/g' ./myfile.txt
sed -e 's/xingdong/action/' ./myfile.txt
   
   
高级操作命令
(1)
-{}:多个sed命令,用;分开  
nl passwd|sed '{20,30d;s/false/true/}'

(2)
-n 读取下一个输入行(用下一个命令处理)
nl /etc/passwd |sed -n '{n;p}'  //打印偶数行 同 nl /etc/passwd |sed -n '2~2p'
nl /etc/passwd |sed -n '{p;n}' //打印奇数行 同 nl /etc/passwd |sed -n '1~2p'

(3)
- &:替换固定字符串
cat  /etc/passwd|sed 's/^[a-z]\+/&  /'

案例1:大小写的转换
元字符 \u\l\U\L :转换为大写/小写字符
cat  /etc/passwd|sed 's/^[a-z]\+/\U&/'  //把用户名转换成大写
cat  /etc/passwd|sed 's/^[a-z]\+/\u&/'  //把用户名首字母转换成大写
ls *.php| sed 's/^\w\+/\U&/'  //把所有php文件名转换成大写
cat /etc/passwd| sed 's/\([a-z]\+\):x:\([0-9]\+\):\([0-9]\+\).*$/\1:\2:\3/'   //取 用户名:uid:gid

(4)
-\( \):替换某种(部分)字符串(\1,\2)

ifconfig eth0 | sed -n '/inet/p'| sed 's/inet \([0-9.]\+\).*$/\1/' // 取ip

(5)
-r:复制指定文件插入到匹配行
-w:复制匹配行拷贝到指定文件里

sed '1r 123.txt' abc.txt   //复制123.txt的文件内容到 abc.txt第一行后面,文件内容没改变
sed '1w abc.txt' 123.txt   //复制123.txt内容的第一行到abc.txt中(清空然后写入)
sed 'w abc.txt' 123.txt    //复制123.txt内容到abc.txt中(清空然后写入) 

(6)
q:退出sed

nl /etc/passwd | sed '/daemon/q'  //找到daemon所在的行然后退出
nl /etc/passwd | sed '10q'  //读取到第10行退出


sed -f scriptfile file(s)


Linux 中查看文件第n行内容的命令
Linux 中查看文件第n行内容的命令

方法1:
head -m filename | tail -1                    //查看filename文件的第m行(tail -1 是数字1)
例子:head -100 data.txt | tail -1          //查看data.txt文件的第100行

方法2:
 nl filename | sed -n 'mp'                     //查看filename文件的第m行
例子:nl data.txt | sed -n '100p'             //查看data.txt文件的第100行

方法3:
sed -n 'mp' filename                            //查看filename文件的第m行
例子:sed -n '100p 'data.txt                   //查看data.txt文件的第100行

方法4:
awk 'NR==m' filename                        //查看filename文件的第m行
例子:awk 'NR==100 'data.txt               //查看data.txt文件的第100行
mongodb日志太大问题

MongoDB的日志文件在设置 logappend=true 的情况下,会不断向同一日志文件追加的,时间长了,自然变得非常大。
解决如下:(特别注意:启动的时候必须是--logpath指定了log路径的)
用mongo连接到服务端

use admin  //切换到admin数据库
db.runCommand({logRotate:1})

这样会使mongo关闭当前日志文件,重启一个新的日志文件,不需要停止mongodb服务。

如果感觉之前的log日志文件无用,可以删除掉,这样能节省很大的硬盘空间。
Mac下Operation not permitted问题

之前把php-fpm命令复制到/usr/sbin目录中,现在想删除却提示
Operation not permitted
原来苹果系统在某版本后加入了Rootless机制,很多系统目录不再能够随心所欲的读写了,即使设置 root 权限也不行。

以下路径无法写和执行
/System
/bin
/sbin
/usr (except /usr/local)

关闭
重启按住 Command+R,进入恢复模式,打开终端
csrutil disable
reboot 

开启
重启按住 Command+R,进入恢复模式,打开终端
csrutil enable
reboot 

thinkphp的nginx重写兼容配置
 if (!-e $request_filename) {
 rewrite ^/index.php(.*)$ /index.php?s=$1 last;
 rewrite ^(.*)$ /index.php?s=$1 last;
 break;
 }
mac下ssh登录记录账号

vim ~/.ssh/config
Host action1  # 别名
HostName 123.57.204.35  # 主机名
Port 22 # 端口
User root # 用户名
#IdentityFile ~/.ssh/id_rsa  # 密钥文件的路径  
Host action2
HostName 59.110.218.33
Port 22
User root


要是想要免密登录,可以参考
http://xingdong365.com/network/280.html


linux下自制证书
cd /etc/pki/tls/certs
make action.key //期间会让你输入密码

mv action.key action.key.raw
openssl rsa -in action.key.raw -out action.key   //期间会让你输入刚刚的密码,此步骤是将刚建立的文件的密码取消掉

rm -f action.key.raw
chmod 400 action.key  //权限400

make action.crt SERIAL=20170820  //建立所需要的最终证书文件,期间会让你输入证书的信息
ll action* //查看

笔记来源:linux鸟哥的私房菜 服务器架设篇 -www服务器



优惠券
最新微语