shell 技巧

作者: admin 分类: Linux,Shell脚本 发布时间: 2021-11-30 15:48 浏览:1,144 次    

1、多行内容变成一行技巧

[root@qunniao ~]# cat a.txt
0
2
4
6
8
  • xargs
[root@qunniao ~]# xargs <a.txt
0 2 4 6 8
  • cat与xargs结合
[root@qunniao ~]# cat a.txt | xargs
0 2 4 6 8
  • cat与echo结合(文件读入一个变量,然后打印)
[root@qunniao ~]# a=$(cat a.txt);echo $a
0 2 4 6 8
  • sed
[root@qunniao ~]# sed -n '1h;1!H;${g;s/\n/ /g;p;}' a.txt
0 2 4 6 8
  • paste (使用paste命令格式化打印,-d指定分隔符,-s表示合并成一行)
[root@qunniao ~]# paste -d " " -s<a.txt
0 2 4 6 8
  • cat与paste结合
[root@qunniao ~]# cat a.txt | paste -d " " -s
0 2 4 6 8
  • sed和paste特殊需要格式输出
[root@qunniao ~]# sed -n '1,5p' a.txt | paste -d "." -s
0.2.4.6.8

2、指定分割符

#!/bin/bash
arr=(1.2.5.3)
str=(${arr//./ }) # /后有一个空格不可省略,否则会输出在一行
for i in ${str[@]}
do
echo $i
done

3、Shell中去除字符串前后空格的方法

  • awk处理
[root@qunniao ~]# echo ' a b c d ' | awk '{gsub(/^\s+|\s+$/, "");print}'
a b c d
  • ^\s+ 匹配行首一个或多个空格
  • \s+$ 匹配行末一个或多个空格
  • ^\s+|\s+$ 同时匹配行首或者行末的空格
[root@qunniao ~]# echo ' abcd ' | awk '$1=$1'
abcd
[root@qunniao ~]# echo ' abcd ' | awk '{sub(/^ */, "");sub(/ *$/, "")}1'
abcd
  • eval处理
[root@qunniao ~]# eval echo ' a b c d '
a b c d
  • python处理
[root@qunniao ~]# echo ' abcd ' | python -c "n=raw_input();print(n.strip())"
abcd
  • sed处理
[root@qunniao ~]# echo ' abcd ' | sed -e 's/^[ ]//g' | sed -e 's/[ ]$//g'
abcd
[root@qunniao ~]# echo ' abcd ' | sed -r 's/^[ \t]|[ \t]$//g'
abcd

4、随机选择文件内容

  • sort处理
[root@qunniao ~]# sort --random-sort filename | head -n 10

注:
   使用sort命令读取文件内容,选择前10行

5、格式化输出

  • column处理
[root@localhost ~]# cat user.txt 
用户名	ID	组名
root	0	admin
bin	1	bin
daemon	2	daemon
adm	3	adm
lp	4	lp
sync	5	root
shutdown	6	root
halt	7	root
mail	8	mail
operator	11	root
games	12	users
ftp	14	ftp
nobody	99	nobody
systemd-network	192	systemd-network
dbus	81	dbus
[root@localhost ~]# column -t user.txt 
用户名           ID   组名
root             0    admin
bin              1    bin
daemon           2    daemon
adm              3    adm
lp               4    lp
sync             5    root
shutdown         6    root
halt             7    root
mail             8    mail
operator         11   root
games            12   users
ftp              14   ftp
nobody           99   nobody
systemd-network  192  systemd-network
dbus             81   dbus


注:

  -t 表格,默认以空格间隔
  -s 配合-t使用,指定分隔符
  

6、将一行内容变成多行

  • tr处理
[root@localhost ~]# cat m.txt
1 2 3 4 5
[root@localhost ~]# tr " " '\n' <m.txt
1
2
3
4
5

注:
   " " 指定分隔符
   '\n' 换行符

7、查看文件完整路径

  • realpath
[root@localhost ~]# realpath m.txt
/root/m.txt

温馨提示:如无特殊说明,本站文章均为作者原创,转载时请注明出处及相应链接!

发表评论