shell 技巧
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
温馨提示:如无特殊说明,本站文章均为作者原创,转载请注明出处!