shell中有很多命令适合对文本进行编辑,如grep,cut,sed,awk等,命令有很多,但没有哪个命令可以方便的通吃天下,而且由于shell命令的独特用法,用后即忘,现在记载于此,方便日后查询。

一、行操作

1.显示文件内容前10行

head -n 10 filename

2.显示文件内容后10行

tail -n 10 filename

3.显示指定的行数(2-5行)

sed -n '2,5p' filename

4.获取指定内容的行号

grep -n "oenhan" filename | cut -d ":" -f1

5.显示匹配内容之间的行

sed -n '/1oenhan/,/oenhan1/p'

6.删除指定的数据行(2-3行)

suse:/tmp # cat dfile
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 4127108 2269932 1647528 58% /
udev 478232 112 478120 1% /dev
/dev/sda7 3091284 282392 2651860 10% /fs
/dev/sda5 505604 79131 400369 17% /var
suse:/tmp # cat dfile | sed '2,3d'
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda7 3091284 282392 2651860 10% /fs
/dev/sda5 505604 79131 400369 17% /var

7.删除匹配正则表达式的行

suse:/tmp # cat dfile
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 4127108 2269932 1647528 58% /
udev 478232 112 478120 1% /dev
/dev/sda7 3091284 282392 2651860 10% /fs
/dev/sda5 505604 79131 400369 17% /var
suse:/tmp # cat dfile | sed '/sda1/d'
Filesystem 1K-blocks Used Available Use% Mounted on
udev 478232 112 478120 1% /dev
/dev/sda7 3091284 282392 2651860 10% /fs
/dev/sda5 505604 79131 400369 17% /var

二、列操作

1.获取指定的列数

suse:/tmp # cat dfile
 Filesystem 1K-blocks Used Available Use% Mounted on
 /dev/sda1 4127108 2269932 1647528 58% /
 udev 478232 112 478120 1% /dev
 /dev/sda7 3091284 282392 2651860 10% /fs
 /dev/sda5 505604 79131 400369 17% /var
 suse:/tmp # cat dfile | awk '{print $2" " $3}'
 1K-blocks Used
 4127108 2269932
 478232 112
 3091284 282392
 505604 79131

三、内容操作

1.获取以空格分离的字符串

suse:~ # df | grep /dev$
udev 478232 112 478120 1% /dev
suse:~ # df | grep -o /dev$
/dev

 


shell文本编辑单行快速参考来自于OenHan

链接为:https://oenhan.com/shell-text-editor-1line

发表回复